summaryrefslogtreecommitdiff
path: root/clang/test/Parser/lambda-misplaced-capture-default.cpp
AgeCommit message (Collapse)Author
2025-11-06[Clang] fix confusing diagnostics for lambdas with init-captures inside ↵Oleksandr T.
braced initializers (#166180) Fixes #163498 --- This PR addresses the issue of confusing diagnostics for lambdas with init-captures appearing inside braced initializers. Cases such as: ```cpp S s{[a(42), &] {}}; ``` were misparsed as C99 array designators, producing unrelated diagnostics, such as `use of undeclared identifier 'a'`, and `expected ']'` --- https://github.com/llvm/llvm-project/blob/bb9bd5f263226840194b28457ddf9861986db51f/clang/lib/Parse/ParseInit.cpp#L470 https://github.com/llvm/llvm-project/blob/bb9bd5f263226840194b28457ddf9861986db51f/clang/lib/Parse/ParseInit.cpp#L74 https://github.com/llvm/llvm-project/blob/bb9bd5f263226840194b28457ddf9861986db51f/clang/include/clang/Parse/Parser.h#L4652-L4655 https://github.com/llvm/llvm-project/blob/24c22b7de620669aed9da28de323309c44a58244/clang/lib/Parse/ParseExprCXX.cpp#L871-L879 The tentative parser now returns `Incomplete` for partially valid lambda introducers, preserving the `lambda` interpretation and allowing the proper diagnostic to be issued later. --- Clang now correctly recognizes such constructs as malformed lambda introducers and emits the expected diagnostic — for example, “capture-default must be first” — consistent with direct initialization cases such as: ```cpp S s([a(42), &] {}); ```
2020-07-18[clang] Provide a more specific diagnostic for a misplaced lambda ↵Bruno Ricci
capture-default. Currently a capture-default which is not the first element in the lambda-capture is diagnosed with a generic expected variable name or 'this' in lambda capture list, which is true but not very helpful. If we don't have already parsed a capture-default then a lone "&" or "=" is likely to be a misplaced capture-default, so diagnose it as such. Differential Revision: https://reviews.llvm.org/D83681 Reviewed By: aaron.ballman