<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/83474>83474</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] False positive "-Wunsequenced" for C++20 parenthesized initializer lists
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          vapdrs
      </td>
    </tr>
</table>

<pre>
    Clang 17.0.6 and the latest git/main branch will issue "-Wunsequenced" for the following code sample,

```c++
int val = 0;
struct S { int a; int b; };

int paren_list_init[](val++, val++);
int direct_list_init[]{val++, val++};

S paren_list_init_s(val++, val++);
S direct_list_init_s{val++, val++};
```

for only the C++20 parenthesized initializer lists, even though both are sequenced operations.

```
$ guix shell clang -- clang -c -o /dev/null -Wunsequenced -std=c++20 test.cpp 
test.cpp:4:26: warning: multiple unsequenced modifications to 'val' [-Wunsequenced]
    4 | int paren_list_init[](val++, val++);
      |                          ^ ~~
test.cpp:7:24: warning: multiple unsequenced modifications to 'val' [-Wunsequenced]
    7 | S paren_list_init_s(val++, val++);
      | ^      ~~
2 warnings generated.

```

I believe this to be a false positive because the C++20 parenthesized initializer lists added in [p0960r3](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0960r3.html) explicitly state that the values and sides effects are explicitly sequenced, and provides the ordering. See C++20 [decl.init]p17.5 and [decl.init]p17.6.2.2, or the latest draft [here](https://www.eel.is/c++draft/dcl.init#general-16.5) and [here](https://www.eel.is/c++draft/dcl.init#general-16.6.2.2)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VU1z4ygQ_TX40mUVbslSdPAhttdVe85hjykEbYkpDFpA9swc5rdvgewk3ky2sl8qlQKkP16_fqZFCLq3RBu23rL1fiGmODi_OYtR-bDonPq22Rlhe1g1BS9qEFZBHAiMiBQi9DoyPJyEttB5YeUAF20M6BAmAoa4_G2ygX6fyEpSDBGOzmf_ozPGXbTtQTpFEMRpNMRwx_ie8cfrt-bzKxlu05tPtY1wFgZYuQfOyutpiH6SEZ6ANVtIJoKV86JLC9bsX0xfw4zCk302OsRnbXWcKWD4cBbmmhF38GbTvsRI3kp7kvGde7P9wP0dhKc_A3gOn0r-9C71c_hc2huhb1GkjjhrvuW27GYn5DO0OFDQ30lBSqKF0d_JQ8oaUg46k4U4uKkfoHNxAOEJXroNbiQvonY2FD_t6nWLFfST_gphIGNAZrEtl7eFhKUDhgdFZ4YHOxkDd5qCZYiKlXv5AjzpspDjCHP825aVjxUrH7Fm5SNchLfa9ml5mkzUoyF4G_TklD5qOaOHmBA0mdEG2Hp7L-r1fk4EAFABa3bw76QF-UlxPnzY-hf48eNdfU2qr_o_62syrn-q29fKUgH5uVWBN8gBerJJN6T-UjX5-yt0ZDSdCeKgcx0dgYCjMIFgdEFHfSboSIop0N_TNwil8nkiZORtzX05d3CIcQysfGR4YHi4XC6FG8kmGRbO9wwPX6JcMTwEiZgMekw75WRgeBjFSD4tkK_atJ8jF0M8GYYt0NfRaKmj-QYhiphAi5iRn4WZKOT7N2hFAeh4JJmAerpze71td9l69O6cHVIU5xV5bfsCnugtG2y9VSRNMWt1P66aYp29f_KPusACU_TrVX4dBcqLY0z2A3n6iCoiU-hU__X3mp0SPbcUWM79N8tVXawTJVcU_13UK_52oTalastWLGizaniL5QMv68WwkQ-ruhZKSqFqEhybh6qqmpLKkmrJj3KhN8ix4ogtcuRlXfBu1dYCa9kSdV3XsIrTSWhTGHM-JVks8kTcPJRVUy2M6MiEPHER8z3HENPw9Ztkv-ymPrCKZx2-Rog6mjymZ4_1Hg73Ov9o3H5a84vJm809u72Ow9QV0p0YHhKU65_l6N0XkonkXFkiPxf3RwAAAP__Ec6Gig">