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

    <tr>
        <th>Summary</th>
        <td>
            False positive from Sanitizer: undefined-behavior
        </td>
    </tr>

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

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

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

<pre>
    In the program:
```
struct A {
    constexpr A();
    virtual void f() {}
};

struct B : A {};

constexpr A::A() { 
    (void)static_cast<B*>(this);
}

int main() {
    B b;
}
```
compiled with `-fsanitize=undefined` flag, Clang reports:
```
/app/example.cpp:9:11: runtime error: downcast of address 0x7ffca2ddc908 which does not point to an object of type 'B'
0x7ffca2ddc908: note: object is of type 'A'
 fc 7f 00 00  a8 4c df bc 66 55 00 00  00 00 00 00 00 00 00 00  83 e0 7c 61 10 7f 00 00  b0 ca c9 61
              ^~~~~~~~~~~~~~~~~~~~~~~
              vptr for 'A'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /app/example.cpp:9:11 in 
```
Online demo: https://godbolt.org/z/axEPzczs8

But it does not look right, since the pointer after the cast is not used, and it can be used after finishing of `B` constructor.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJylVEtv2zgQ_jXUZRBDD-vhgw5yEgN7KHaxRQ97WlDk0GJXJgWSctL8-h3Kduw0aXuoMCDFGc774_RWfmv_MBAGhMnZveMHVnQsfWBpx6r0TMvRBzeLAB2wenviAH3CGh_weXLQsbxh-YYVN9KjdmHmIxytlqBOFxb9-uHsg34uCm_cbIHiODt7d-fWaRGpu5qGq3diRsck8IEHLf4V3AdW3G9ZTkqPJA6D9rcxX-NaVm0CHLg2N4G_Gt9C_4Ha25IJe5j0iBKedBiA2HfKc6ODfkFWPMxGotIGJQlAjXzP8nu4H7nZg8PJuuB_1AqW7_g00YrP_DCNuBJ0KjrKo8uyWDc3m6APCOicdZEh7ZOJ2YNVwKV06D2kz7VSgudSik3awNOgxUAX0YOxASYbsw8WuAHbf0Wx6IZvE1JdqRB5fYrlrZXoi7Qx7mct7W8Vu1dFUAJqBWkaCXgDawFSQS-gqqAsL4LT9p6gKQBTqOl6Bll6Y6pPQXAQGxJc23X9WPnI6t-mDwwfp-BAWfc2zc9fPn3q_v4nFuTLpeFbHPhRW_f5DIalRa9wuOvPYvhpn0Eb-BAdf5qRzIDEg412hxCmBUn5jmhvZW_HsLKO4LZ7iR6eH_96ES--uUX-dqbGhSsaRmv_A6f3Q4gg9doIPM2MiBJ0wFVcI2dBmT5pzZ7ATfe5kdGaICj1uHDPCpSv9oMmxBNEKIFtfArL645DwLpVgm1WVU1dZWVZJLIt5KbY8CToMGK746OPIXgq4hFBOXuAX5Q0md3YflcReptzv6K3SodxPF62O5qHEcB01N7PSINiV27SKk2GVtVp3q-zqq-4SjmvVL_BAtdCZUUpemySkfc4-paVW1Y-JLrN0zzPsqxJmzIv8lVRrrGRm4pnWdErvmbrFGnQjKvoOPYmce0SQz_vPQlH7YO_Crn3em8QL_b5HAbr2h1Klyyxtkug_wMjUa_D">