<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/101276>101276</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] erroneous UBSAN report
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ericniebler
</td>
</tr>
</table>
<pre>
Compile the following C++ with `-fsanitize=undefined -O1`:
```c++
template <class T>
auto make() {
return T{};
}
template <class T>
struct box {
T t;
box() : t(make<T>()) {}
};
template <class A, class B>
struct pair : box<A>, box<B> {
};
struct A {};
template <class A>
struct B {
B() {
box<B>* pbox = reinterpret_cast<box<B>*>(this);
(void)static_cast<pair<A, B>*>(pbox);
}
};
int main() {
pair<A, B<A>> p;
}
```
Executing the following code results in:
```
/app/example.cpp:25:11: runtime error: downcast of address 0x7fff4fa07ff6 with insufficient space for an object of type 'pair<A, B<A>>'
0x7fff4fa07ff6: note: pointer points here
e7 fe c4 60 00 00 90 9d 42 13 15 7a 00 00 08 81 a0 4f ff 7f 00 00 98 ae e7 fe c4 60 00 00 60 4f
^
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /app/example.cpp:25:11
```
The problem seems to happen when casting pointers to objects that are only partially constructed.
GCC's UB sanitizer accepts the code without complaint:
https://godbolt.org/z/1hzcMosov
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8VU9v-ygQ_TTkMmqEIYnjgw-J0-ypu9K2PexphfE4ZhcDAtx_n_4nbCdN218bWcEwzJvnNzMgQlAng1iS9Z6sDwsxxM76Er2SRmGt0S9q27yWle2d0gixQ2it1vZZmRNUhO0J28Ozih2QDb1pgzAqqjck_DCYBltlsIGbvzKyoYTvCD0Qev7f0OmRE8i0GrF3WkQEwiupRQjwQPjtZBNDtNCL_5GwLWEFkHx2AvAYB2_gIS3lB8JnQ3q_CvkTeIh-kBFq-3KN-wDxAgbJeA7NdxAJ245seDXCjJYzr0vgazbfkNgRVsH0uv_Mxwnlx2gpNq92Y6BqnqXd72y_hpoxdvBZlm-JfIq-v9Zi_1V2uCJC2A7cKB8_gEdlInrnMf4rRYiEVx92TnrFToWk2UVhwrZPVjWEFSGKqOTZN6kwfj2r4AOCG1NyhQA_KK9MhF4o8-U7PsFPKvNbcL8ppHPVXgPfvqAcYmqIj-0hbYPgMQw6BlDmuwaYp-wonCPsiC-idxqX0jnCd2xN-C7LUgn4wUTVI6D31qeFxj6bpBDYFkTTeAwB6Evetu2qFTRv283UmcqEoW2VVGgiBCdkIulBGLD1fyhH__jqEAjLv9GCsHyi-RE_sTA2YhqdHXM-jQE69Djrizm0CHIFGwp0fKCgUDSwYpBxyNaQi7OBbmGbgaCwaqFtIW8vHlsQ-DuoTdr7XpGXH1nfwrR8_3h3t_v7n0Ty8Xwo7bETT8r6-_nAGgW9HFk39WyGn9MCP1TFQ4fgvK019hAQ-wDRQiecQwPPHRpIqUtlMgs32qeEBIidiCA8gjX6FZzwUQmtX0FaM_UmNsvrYH9UFWF5gMc9nI9gD0JKdCMYTrWYqsEOEaRNra9MvJRkF6MLacaOhB1PtqmtjkvrT4Qd3wg7Zt2bvLPBPk3bF03Jm4IXYoFlljPGC7qm2aIrt7jOG4lM5GuarXLJOZfbgsm22XLJN_VClYyyFc15RrPVlmVLXmS0XeVFsS42rNhkZEWxF0ovtX7qE4OFCmHAMqMZyzcLLWrUYbyuGJNamBNhLN1cvkwON_VwCmRFtQoxvENEFfV4x00e68PYRAbtkCS73_0JHp31ERaD1-UnMVTshnopbU_YMSHOw43zNiWLsOPIMCSZJpJPJfsVAAD__6zEG54">