<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">