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