<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62606>62606</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-cl incorrect SEH exception handling
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
djelinski
</td>
</tr>
</table>
<pre>
The following code is supposed to read from potentially inaccessible memory, and return the provided default value if the memory is not accessible. It works fine when compiled with with `cl` (outputs `except` and `done`), but crashes when compiled with `clang-cl`:
```
#include <stdio.h>
#include <windows.h>
//#define WORKAROUND
int SafeFetch32(const int* adr, int errValue) {
int v = 0;
__try {
#ifdef WORKAROUND
printf("");
#endif
v = *adr;
#ifdef WORKAROUND
printf("");
#endif
}
__except(EXCEPTION_EXECUTE_HANDLER) {
printf("except\n");
v = errValue;
}
return v;
}
int main() {
SafeFetch32(0, -1);
printf("done");
return 0;
}
```
When compiled with `-DWORKAROUND`, the code generated by `clang-cl` works as expected.
Clang downloaded with MS Visual Studio 2022 Community:
```
>clang-cl --version
clang version 15.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\Llvm\x64\bin
```
Not sure if that's relevant, but the results were collected on Windows 11 21H2.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVVFv4joT_TXmZQRynCaQhzywAbSrb7ddtd123yonnhDvOnZkO1D-_ScnaYHe3rcrWS34jGfO8Zkx3Dm514g5Sb6QZDPjvW-MzcUfVFK7v3JWGnHKHxuE2ihljlLvoTICQTpwfdcZhwK8AYtcQG1NC53xqL3kSp1Aal5V6JwsFUKLrbEnwgrgWoBF31sNvkHorDlIgQIE1rxXHg5c9QiyHtDxWKinjYdzvgV883A09q-DWmqEY4MaKtN2UqGAo_TN-IektFIkpUDYyvS-670Le_haYefDfmBDUiqMRpJSwrJAsew9VJa7Bt1nmYekXO_nQ2oSrwndELoOn8c1fmWx1JXqBQKJC-eFNIuGxNvP0KPUwhzdJT5F7YYVCxxkPt_d_299f_frdnMZJbWHB17jDn3VxIywVWW08yC1J2wNXNggKkShtU_hegnLgCy_jMdhgA5A4g1QEr_vvrx4ezqHBca1wPoTEhl0VmpfE7YijA0re09EWIxayPotLUylCFsHZvF_nJ4sN2cBk89stf1dbH8-fru7fdn-3ha_HrcvX9e3m-_b-6ubIDS7rDSdTgr9oeZZxPuFnqELAlObH85k37Bw4y2Xeih0zeDaSRqsm0dXiq9ZDq374U5oNpWm_yz9oU2fP-3v-ebChnQgEcZxGP49arTco4Dy9GEWppHkDvC1w8qjWFw2ahEiQZijVoaLt3I_HuBJup4rePC9kAYYZQwK07a9lv70r_MVb98qw3x-QOuk0SM07MO0BVGyoItoRB653aMn8RpeV-lLejPvqvk0fPPWHaopqhletNYIVCG2M06-jtA37TxXCsVG2gAVgV5S_LRmb3kLO6nQkaT4IStrnKn9tTSSFEEcSYqzvKR4KkhSPBqjwsnv6tCSpHhNb0hSlFJ_qv3WeHC9nZ5J7glbOrCo8MDDzI8vWDDMouuVd3BEG9xTajAFjIbnUTVEEbDoK1vMRB6LLM74DPMoXcVJEq2W2azJKeMRX9KSxiWNbuqopiuRrcplxDCjlUhmMmeUxTShqyiOlkm2iGiUlcmSZquYZmmJ5IZiy6VaKHVoF8buZ9K5HvOUpTSdKV6icm8_QTYPQfOy3ztyQ5V03p2PeekV5u-uS10Za7Hy8LD9CuO0BsMbroWSej_rrcob7zsXTBqe0r30TV8uKtMStgt5p3_zzpo_WHnCdgM3R9huoPf_AAAA___u9yM3">