<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/137473>137473</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
New __ptrauth types are wrongly reported as __is_trivially_equality_comparable
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
halbi2
</td>
</tr>
</table>
<pre>
```
struct S1 {
int * __ptrauth(1,1,50) p_;
bool operator==(const S1&) const = default;
};
static_assert(!__is_trivially_equality_comparable(S1));
```
This test case fails. So libc++ `std::equal` will use `memcmp` to compare objects of type `S1` and will wrongly report that they are not-equal when they are supposed to be equal. This is a wrong-codegen bug.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEUk2PozwM_jXmYrUKDoVy4NC-VY_vZfaOArglq0DYOEzVf78KjDS7p5XMV_J8YOcxIvY5MzdwusLplpk1jj40o3Gdpazzw7uBUn2VukgMax_xI0eorqAuiHaOCHTBtl1iSGygcw70X7pOCqjGpQW9YzvvHfqFg4k-gL6lonPvZ0mSQGWC75-gbzjww6wu7myobvuLRBNt3xoRDhHoDJS3rZU2BvtpjXPvln-txtn4bns_LSaYzjHQORnUqXa5P5r6MVrByBKxN8L4MNbJET88Otv1QFegK0KpJA6gL6Avmz6UCl_WOVyF0-7EUz8taTV63I0ZffeT-yjoHxjfy4b7yBPGzMPOfgU_P90bAy8-RIyjSTd-Y6LPPh42M3yNPH-vy7osXnhIVh3jBjni1oYVNLvoofcDP3nGbn0es6HRQ61rk3GTV8WpUqqodTY2Z6L8UVZKl3WhuCoqRaZ49I_hUZeGjclsQ4pOqqCSVHHO9fFEdXVSutBa9WoYzlAonox1R-c-p6MPz8yKrNzkuioqnTnTsZMtXkQzv3DbBaKUttAk0qFbnwKFclaifMtEGx03__PrO1vbFGWbwd-D4wGN4L9zkK3BNWOMi6SjpDvQ_WnjuHbH3k9A92T-9TgswafTA7pvvyxA96-ePhv6HQAA__81Jge_">