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

    <tr>
        <th>Summary</th>
        <td>
            mysterious clang-tidy bugprone-use-after-move warning in obj-c block
        </td>
    </tr>

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

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

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

<pre>
    Consider:

```
$ cat /tmp/a.mm
#include <utility>

struct S {
  void foo() const;
  bool b;
};

void run_block(void (^block)());

void bar(S s) {
  run_block(^{
    if (s.b) {
      std::move(s).foo();
    }
  });
}

$ build/bin/clang-tidy /tmp/a.mm -checks=bugprone-use-after-move -- -fblocks
1 warning generated.
/tmp/a.mm:12:9: warning: 's' used after it was moved [bugprone-use-after-move]
    if (s.b) {
        ^
/tmp/a.mm:13:20: note: move occurred here
      std::move(s).foo();
                   ^
/tmp/a.mm:12:9: note: the use and move are unsequenced, i.e. there is no guarantee about the order in which they are evaluated
    if (s.b) {
        ^
```

Is this a false positive, or am I missing something?

(Based on http://crbug.com/1385107)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJydU9tu4jAQ_ZrkZZQosQkpD3mgUKQ-9wNWjm0St4nN-kLFfv2OAwFaLdLuRmFie8ZnzpwZWiNOzcZop4S0CV0nxTYpZrssLu95SxbAmYeE7Px4QMvycZxdVGk-BCEhoZvg1aD8KaEv92jO28A9vEFSP59PAI5GCdgbk5CnhKyAIw-f0Ku7NWaA9nqQ1NvberLTfRv0j3Yw_ANRpoOIVr1cjlZn7Pj-4W7LLPrfwMX0d8TuMRHrzgOg9jGDy9tvd-LjvIgi0vVojjJGYUx-LfCuNIBYzWUTl_f8Zs9N9zaoQaDkrdJo-cB0l3klTl-bARnvJf9wCd22oTtYo2UWnMzY3kubRUqQZZDtp8rcGb2ET2a10h10UkvLvBT5nPe-z3RdEjTIcj3fiMuE1FhjDZhGwJQHlMcABzEd9qJ6fkAlqbZ_pynqU708oETRkCIS0cbL-J2qNJwHazF9L638z_58ex5zuMoyU_C9jHoA0-JMh1k80E7-DFJziX3cgMplHgPRoxzehC4wy7SXGN2a4CcQY0XUU8Nnr3gfj04TljyyIcRO_buA3_7Sk311CI0sGOzZgLwPximvoj4bpABshFcYlXNxSJwZJQbH5u--DunTM4szYDT03h-iymQXZ9Vi_3NuRlyX9KkqixopprIpl8tVScua1qloqFjRFUu98oNsxpPDIVEmOLib9EcTPY8vymTa94zDNN1psEMTibgrk075PrQXKsNwnD8Zwr5L7nGLRQaJM7GrkFqR9g1pV5wxWpd0VckloWVZiIoJXta14IslSwfWysE1OOYJITe2uMH5TlVDCkLKEn_VghSrnO7bfd0ywRbL5Z5g0KKQI1NDHonkxnapbSZOWK1D56CcdzcnwyZ0WsopH-Kz4Htjm1-jEXJMJ_bNRP03acuvBA">