<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/82918>82918</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Captured structured binding is wrongly considered a bitfield
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Rajveer100
</td>
</tr>
</table>
<pre>
```C++
struct S {
unsigned short i:2;
};
int main() {
auto [i] = S();
(void) [i]() mutable { i = 42; };
}
```
In the above snippet, assignment `i = 42` produces a false warning:
```
warning: implicit truncation from 'int' to bit-field changes value from 42 to 2 [-Wbitfield-constant-conversion]
6 | (void) [i]() mutable { i = 42; };
| ^ ~~
```
The `i` being assigned is the captured binding as the lambda function's parameter.
[GodBolt](https://godbolt.org/z/dTbneKG46)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJykk7uu4zYQhp9m1Axs0CPrVqg4tuNFkC67QGreLHFBkQJJebEp9tkDSj4XHyBpIhASQf38OfMNh8doBqd1D9UJqkvBlzT60P_Jv9-1DgfGCuHVzx5qto0z0CkPdgH2ElNYZMKvCM1jBRFxcaulwjj6kNBA-UJQPgTQXN7n69u4hBM3DqgF6p6t-JI8QnUyUF0Qygt-3VRvFlkE1N69UevmTfqwmpbEhdXZEs26_ZgDwacYmstj8prhx9h-d5hGjVz4u8bozDzrBHTGjdqkXUKo2Zt3zXAOXi1SR-R44zZq_MGDM26A8uWj8afT3kVoptkaaRKmsDjJk_EOb8FPCNQYl4AaTB6FSbub0VahHLkbdMQ7t4velEfKEso0dn8Jk1bhTnoXE3cpT-46RONdRvWGsUZozvi_geJm8bD61weq3_DXr_9A_23UK9sMVWjjhgd0rdDEtSqSz2kJWqEwTm2Cdd3ySSiOt8XJTA-oiTjzwCeddNg_VaE6ffHq5G3achxTmmOuFF2BroNXwtu092EAuv4NdFXfhNN_fDnWQF2h-lJ1ZccL3R8a1rZ1VTV1MfZKdiUpIVrBlFRMdqwq6_rQqoOqpOpYYXpidGRE1YEqquq9qKUsqWPEq5s8aoIj0xM3dm_tfcrHFybGRfctdYe2sFxoG9d-JZKWuwGIcuuGPut3YhkiHJk1McV3h2SSXZt821Fd8PyKb-viJ5Im4o_g3WB_Yr42Run8l-PrZSqWYPtPtEwaF7GXfgK65mMfn90c_HctE9B1zSICXddE_gkAAP__0RZK_Q">