diff options
| author | Oleksandr T. <oleksandr.tarasiuk@outlook.com> | 2025-11-06 22:55:36 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-11-06 22:55:36 +0200 |
| commit | bb6d2bea6495b044a0773598916eba801f8d38fc (patch) | |
| tree | d0705565bf3cdf1f0016439cbbf905506c0505c0 /llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | |
| parent | 6adf99338832966dcf3477e112b158cd588ac584 (diff) | |
| download | llvm-bb6d2bea6495b044a0773598916eba801f8d38fc.zip llvm-bb6d2bea6495b044a0773598916eba801f8d38fc.tar.gz llvm-bb6d2bea6495b044a0773598916eba801f8d38fc.tar.bz2 | |
[Clang] fix confusing diagnostics for lambdas with init-captures inside 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), &] {});
```
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
0 files changed, 0 insertions, 0 deletions
