llvm-project
41a9df23 - [Clang] Fix handling of explicit parameters in `SemaLambda` (#168558)

Commit
32 days ago
[Clang] Fix handling of explicit parameters in `SemaLambda` (#168558) Previously, the presence of an explicit parameter list was detected by querying `getNumTypeObjects()` from the `Declarator` block of the lambda definition. This breaks for lambdas which do not have a parameter list but _do_ have a trailing return type; that is, both of ``` []() -> int { return 0; }; [] -> int { return 0; }; ``` would return `true` when inspecting `LambdaExpr::hasExplicitParameters()`. Fix this by instead querying the `LParenLoc()` from the `Declarator`'s `FunctionTypeInfo`. If `isValid() == true`, then an explicit parameter list must be present, and if it is `false`, then it is not. This commit also adds `hasExplicitParameters` as an attribute to a `LambdaExpr`'s JSON AST dump. A new test (`ast-dump-lambda-json.cpp`) is also added to validate the fix and presence of the new attribute in the output. `ast-dump-expr-json.cpp` is also updated to validate the new attribute. Fixes https://github.com/llvm/llvm-project/issues/168452.
Author
Parents
Loading