<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/156052>156052</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[ORC][C-API] Crashes during exit when using LLJIT on Windows
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
njroussel
</td>
</tr>
</table>
<pre>
Hi 👋
On recent LLVM versions (19+), I've observed unusual crashes during program exit when using the ORCv2 C-API on Windows.
# Details
I have built a reproducer that does what I believe to be the bare minimum steps to build a LLJIT instance and dispose of it. Once my program exits, it crashes. More specifically, my programs exit with code: -1073741819 (0xC0000005 - Access Violation). I load the C-API dynamically in my programs and free it before exiting.
I can only reproduce this issue on Windows. In addition, it seems to only happen when using the pre-built binaries provided on the [releases page](https://github.com/llvm/llvm-project/releases). I have built the LLVM C-API locally in both debug and release modes and could not reproduce the issue.
# Reproducer
Platform information:
OS: Windows
Architecture: x86
LLVM versions: 19.1.7, 20.1.7
Minimal reproducer:
[reproducer.cpp](https://github.com/user-attachments/files/22049555/reproducer.cpp)
This does not seem to be an isolated issue to my setup, we've seen [other users run into it](https://github.com/mitsuba-renderer/drjit/issues/356). In addition, we're able to observe this behavior using github's action runners (`windows-latest`).
# Notes
Not creating the LLJIT instance (i.e not calling `LLVMOrcCreateLLJIT`) or not disposing of it (with `LLVMOrcDisposeLLJIT`) does not produce the crash, hence why I believe this issue to be linked to LLJIT specifically.
I am unfamiliar with how Windows dynamically loads and frees libraries - I'm assuming that the cleanup is not complete after the `FreeLibrary` call as the program only crashes when exiting.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVk-P4rgT_TTmUgIFQwI5cKBpoR8_9UyPZkezZyeuEM86duQ_MHz7VdnQQF9G2xfoxK569erVK4T36mgQN6x8YeXrRMTQW7cxv5yN3qOeNFZeNv9TwPYFq_esnrP1C7Biy4rtuwGHLZoAb28_v8AJnVfWeGB8Pa8Zf2G8ZnwHB8ZXJwTbeHQnlBBN9FFoaJ3wPXqQ0SlzhNHZoxMD4G8V4NyjgejpeegR3r_vThx20-23A1gDfysj7dnPMgzGF_CKQSjtCdgBenFCaKLSAQQ4HJ2VsUUHoRcBpEUPZ_p2gAa1whNCsNBgStQIhzAoo4Y4gA84-vQyKi1BwNvb_w8_QBkfhGkRhJEglR-tR7AdqDCDd3o-XJ6K8USCCrd6Z_DFOgQ_Yqs61QqtL3TgfslfKVChh9ZKZIstTOfFarFaztfzmugtfu-K9FfCFLZti97DT2W1CMoaxusZHEBbIVNNmTZ5MWLI6UCZp3RUR-cQCWSDHaEjBMocrwwfoBUGrNGXO50QeuVBeR_xsSVwMCCkVBlIqtsjDonGFKAX44jmc4NHh9PcsUYZ4RR6gndSEiVFpyOsfHGoUXh6J47IylfG130Io2eLLeN7xvdHFfrYzFo7ML7X-nT7mI7O_sI2ML6_xbiy9KAVSpKEnAnT9oOsxoYeJDbxmLi6hoDBSszstTZqCcaGJ34w03OTaVbq9w89smL7TYvQWTeAMvSR27dIs_UXtf3KKiu2W9f2KmAbokuC-L2uWLF9mjt6PK9n89mKiOdF-pbyfiFBC_0wC3SW3hGnt2ezdhz_SGr06KYiBNH2AxrS9r5Tmujcc14s67IsE8lPQXmdcfwgyaQBJKpIF9fREwaUJ_mivEoqWJKoxxBHquaM2UQ8oiEl2NCjAwLjwUUDygQLKvwR_qCCj42YOjQSHTrG99L9UiSMlJfqWJRVFsezkhMEhyAaneBd_SzPQYO9OCnrrpLOORlfeRAtBSCQhsAyvmZVcc59nVLFPrCqoIR3jXy1AanpXy25BopwG5NPBsT4Ws0wkUlapVOsKkgU767d0UVMN3ICAOvS2exZdDq5FoVJZnO_-5pd7fHyR9se9Z0sjcjpkfCc-8ujq94NIndZK_MPSvon1_FogR9OIwaIphOD0kq4bIK9Pd8m4cnGyOHu7uVBq8Zl75impTOA8D4OmTyRB7zVKEwcQeViWjuMGgOC6ELaEEgs7B3iWwp2YVWRuAXhr0aVjT152W2DJTN7sMyJ3CxkvajFBDfzVVkt18tiVU_6TV0hR5SF7DpR1XVVzderxbqYd8jrZb2UE7XhBS-LNa_n1Xy5WM26sluV1aqRZSEXsunYssBBKD0jW5tZd5wkhjfzsipKPtGiQe3TMufc4Dnzzzin3e42yQubePRsWWjlg7-HCSro9Cvg_fuOxqh8STbIylfYPS_qzws6N_O-AybR6c1_9uWP8btWctrwfwMAAP__K6DeOw">