<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/137518>137518</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] Regression: crash compiling dynamic_cast with final class and optimisation level higher than 0
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
andyg1001
</td>
</tr>
</table>
<pre>
Since clang 19, the following minimal code will crash the compiler when compiled with an optimisation level -O1 or higher:
```
class base { virtual void fn() = 0; };
class test final : base { virtual void fn() { } };
test* new_test() { return new test(); }
test* cast(base* b) {
return dynamic_cast<test*>(b); // crash here!
}
```
On my PC, I get the error "fatal error: error in backend: Broken module found, compilation aborted!"
See demo here: https://godbolt.org/z/75odnc3Wo
Remove the 'final' on class test and the code will compile again.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyEU81u8zYQfJrVZRGDoiTLPuggxzXQ01ckhx4DilxLbCjSICkb7tMXFO0kKAoUICDxZ2Z_ZkeEoEdL1EFzgOZYiCVOznfCqvtYMlYWg1P37l1bSSiNsCOWe-CvGCfCszPG3bQdcdZWz8KgdIrwpo1B6UWY1lfSzRdtyONtIvvcKbzpOKGw6C5RzzqIqJ1FQ1cy-PKrROdx0uNEHqoe2Lq27LFYL40IAQcRCKE94FX7uAiDV6cVni3wHfA9QnVEBtUBoT1CdfiCRQoRz9oKg1D1_8vSrgTfJAkOvEdLt4_8__XOU1y8TTf4ffPMYC3iCZZivU6x03Z4MADr8cmi7lbMWn6sT6vXBxKq3xLuyctPwE-PZk_kCXiZAuVwPxoGrP9lcb7jH69Jvd9xpLiqQ947j8D5WURh8jZ1JZ9ri4OQn2RVOjt490kWZ6cWk9RfrEpkWdIsoBicj6RSGpznuO9EqGh2Ob-qxynGS0iyrsmPTg3OxI3zI_DT38BPbeOUldWfLuPfaHZXWpMF3q66AW_RWfwhp7DqMWxfA5gHDcUotN0A6wvVVWpf7UVBXdnWTbuteF0WU8fKppXbtt5JJbfU7s_bijeq3lU1axpVD4XuOOMNq3lb1mXNyo0oJZfU0k7tm33TENSMZqHNxpjrnCopdAgLdWXVNuWuMGIgE1aHcb6aKDWnORa-S4CXYRkD1MzoEMM3RdTRrLbMiOaIbzR6CkE7m9qYRc9lJg_-nJfsrjzjuUupQf9htewxjJOwyIrFm-5f6ug4LcNGuhn4KaX2-LxcvPuLZAR-WksNwE-Paq8d_ycAAP___M5ckQ">