diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 097565f955a8fb..9e00abc22ef7d2 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -544,24 +544,25 @@ static T *addComdat(T *G) // Add comdat information to make MSVC link.exe happy // it's valid to emit this for ld.exe too, // but makes it very slow to link for no benefit -#if defined(_COMPILER_MICROSOFT_) if (G->getParent() == shadow_output) { +#if defined(_COMPILER_MICROSOFT_) Comdat *jl_Comdat = G->getParent()->getOrInsertComdat(G->getName()); // ELF only supports Comdat::Any jl_Comdat->setSelectionKind(Comdat::NoDuplicates); G->setComdat(jl_Comdat); - } #endif +#if defined(_CPU_X86_64_) + // Add unwind exception personalities to functions to handle async exceptions + assert(!juliapersonality_func || juliapersonality_func->getParent() == shadow_output); + if (Function *F = dyn_cast(G)) + F->setPersonalityFn(juliapersonality_func); +#endif + } // add __declspec(dllexport) to everything marked for export if (G->getLinkage() == GlobalValue::ExternalLinkage) G->setDLLStorageClass(GlobalValue::DLLExportStorageClass); else G->setDLLStorageClass(GlobalValue::DefaultStorageClass); -#if defined(_CPU_X86_64_) - // Add unwind exception personalities to functions to handle async exceptions - if (Function *F = dyn_cast(G)) - F->setPersonalityFn(juliapersonality_func); -#endif } #endif return G;