<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64990>64990</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Asan with Windows EH generates __asan_xxx runtime calls without required funclet tokens
</td>
</tr>
<tr>
<th>Labels</th>
<td>
bug,
compiler-rt:asan,
platform:windows
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
sylvain-audi
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
sylvain-audi
</td>
</tr>
</table>
<pre>
This issue has been discussed in #39667 as well as https://github.com/google/sanitizers/issues/749
As mentionned by @rnk in a comment: "ASan instrumentation isn't inserting calls into EH pads with the right funclet token bundle, so any attempts to do ASan checks inside funclets will be removed by WinEHPrepare. "
It seems that not only WinEHPrepare will remove the calls themselves but it also discards the entire Basic Block around it, replacing the content with `unreachable` statement.
Here is a repro:
```
char buff1[6] = "hello";
char buff2[6] = "hello";
int main(int argc, char **argv) {
int result = 1;
try {
throw 1;
} catch (...) {
// make asan generate call to __asan_memcpy that should report an error due to memory overflow.
__builtin_memcpy(buff1, buff2 + 3, 6);
result = 0;
}
return result;
}
```
See in Compiler Explorer: https://godbolt.org/z/Tacdhsz4T
Notice, in the `LLVM Opt Pipeline Viewer`, the `WinEHPrepare` pass of `main`: the entire `catch` Basic block and successors get transformed into a single `unreachable` statement.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEVVFv2zgM_jXKC9HAlR27fshD2q7YAbu7ARu2x4K2GVtXWfKJVNLs1x9kJ1vahx0QOLZEfSQ_8qOQ2fSOaKs290prPtkDGneDsTNKa7V5XGGUwYft9c6q8d1p-3UwDIY5EgzI0BA56Ay3kZk6MA6UzvO6LCtAhiNZm_4HkYlVvlP6Semn3sgQm3Xrx_ThfW9J6SdGZ8T8oMBKP80O0ktV1Cp7VNluee4YRnJivHPUQXMCVWTBvSS_CK0f06bKd6C03n1BB8axhJhWMR0Cw07pStI6BTGuhxatZTBOPHz4CBN2DEcjA8hAEEw_COyjay0JiH8hB010XYr3AdgDuhOgCI2TMIiHzsPsth2ofUmobDq6ACRga6EhCDT6wxL_d-M-fPwcaMJA6xT2dbZ_CDDRyCADCjgv4J19e2bBXADnmJd8ZKCRyR6IoYkCRgAt-7lQGLp5HxKPgeAe2bRwb337Ahh8dB0YSfkFmiy2iaMZ1zshJws5qsyiC4TtgI0lVWbAgkKJ5zVcZ_CRAoFhwIQW_FyaZbvMzr_5sx0wQBP3-1u1uS_V5hFU_pjoGMhan2jJ799Z6v-zXJ7GCYxonNJ36RVD36bkZhild0rvMPQHpWtQ1fkgpHaAQBytzOi3PzEBJJyuLQFkCP74xkRVj9CitAMofbder9-BAywygBFfCJDRQU-OAspSvdRIz89p_XmksZ1OS_l58NF2iUcfBNABheADdJHSgZFGH07gDxT21h_Xv5w9PzfRWDEXNKXvFqL1w8IjKH0Pefosla6v8oBrDrK3CV5eA0kM7mz4i_qLwbsyL88vREmwD36cjKUAH14n6wOF1B3vJoXvGm9l7UOv9NMPpZ--YtsN_KP4ukD95cW0sxqNm9tUldmnT9_-hL8ngc9mImscwTdDRwopCv1wsboWUWrgCZnB79PW3C5llsK5Fooqs7mqyXoRTbOIxnXAsW2J2QeGPo2KgI73PozzSBQPCGxcb-m3yllSWnXbvKvzGle0vS1rXVd1XdSrYVvV5R6bblPXSEVe1FXe3em9LjY1VkVdVyuz1ZnOszu9uS1vtb5bY5lV1W2x2VC2b2ivVZHRiMaurT2MidTVPGe3ZVHX2cpiQ5bPV0IT-6Ql_aC0bs-FuglptqbG_Lk1WZSUp8p3R-M6f-Tz_RG2ycdNE3tWRWYNC__yKkYsbXep8-dx8n05mgbwRQl8kcDr6yuE6MSMl9mWjviYBPpvNIG6twOaVzHY7W8unBTF-e9mCv4fauX6wpm5-C8AAP__ov1C-Q">