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

    <tr>
        <th>Summary</th>
        <td>
            clang tagged pointer optimization
        </td>
    </tr>

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

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

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

<pre>
    Clang (testet with version 13 and 14) with optimization (O1 or greater) breaks pointer tagging.

```cpp
#include <stdio.h>
#include <stdint.h>

struct TestStruct {
    TestStruct(int ii) : i(ii) {}
    int i;

    bool hasFlag() const { return reinterpret_cast<intptr_t>(this) & Flag; }
    TestStruct* removeFlag() { return reinterpret_cast<TestStruct*>(reinterpret_cast<intptr_t>(this) & ~Flag); }

    static const intptr_t Flag = 1;
};


int main() {
    TestStruct *a = new TestStruct(42);

    intptr_t i = reinterpret_cast<intptr_t>(a);
    i = i | TestStruct::Flag;
 TestStruct *b = reinterpret_cast<TestStruct*>(i);

    TestStruct *c = b->removeFlag();

    printf("b->hasFlag()=%s\n", b->hasFlag() ? "true" : "false");
    // without optimization b->hasFlag()=true
 // with    optimization b->hasFlag()=false
    printf("a=%p b=%p c=%p\n", a, b, c);
    // without optimization a == c && b != c
 // with    optimization a != c && b == c

    return 0;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVU2TozgM_TXiouoUyCSQA4d8TK572L1PGXDAs8RQtsjU7mF_-5YN3YFsZme6qsvtWHrSexKypXO6MUoVsD3C9hzJkdveFtdvsr5L099lVPb1X8Wpk6ZBoJyVY8X4XXOLd2Wd7g0mAqWpMUmB9pOlH1jf9N-SvRko_y3B3mJjlWRlvVdplfzT4dBrw8oiy6bRptlAfIb4MK-7ePqrhmE-IaFN1Y21QhAnx7XuNy2ILz-yGl6aw-rYjhXjH8rx79MWsuNkQsTFOVCuDaPWni2IA2p_Mv3KjpCdH6DgB-K4zOPPy77vsJXu0skGKPfQqjcupESreLQGrQoFGKzir5V0DOKkDQ9sv7JnTjm32oWktMMQSBxxlX1J-YBW3fq7WmT8_1wr8JTwU4z-mTLtV6we3BxL1tWs-j1KkIEgzpg8ipadnwo4rb60N6nNQ8wr4Qh0kCGiUd_XPUxpYvfM7IOMDrifipbLMCFAwGmE7LTMKA4gDnOfZuc1z_JH-V60Qr_mvg5YhYDlG4gvz81_gR2sNnwNZgqY1fcJ4gy0dbA9GSACOuF_fRDEBYGI7aiAKMwGEF1l51QAresEdAG6hFuhH3l9MbwkEOJO8AXWh_o5diLxUqyctA1Yvm-qebNQK4Nkv1Sf0RG-Pd-Fyg-Fn4sSgZJw8gtS5IfzAj4HfO7fPMrxanLW12VUF6Lei72MVJHssnS324qUorbIttU1zuOylnlVJqKKY5GUlcpFmtdyK0WkC4pJxAltk126j2lT79JrHgva77MsydUV0ljdpO42XXe_bXrbRNq5URW7mPZp1MlSde79IbGFd3orx8ZBGnfasXvAWHOniio8Kv7uV_XHU7AsTTTarmiZB-cHK5Sw0dyO5abqb0AXH2_-9zbY_pvyw3MJnBzQJdD6NwAA__995f8_">