Author: rnk Date: Thu Sep 17 12:04:13 2015 New Revision: 247902 URL: http://llvm.org/viewvc/llvm-project?rev=247902&view=rev Log: Use the MSVC SEH personalities on Mingw
Mingw generally wraps an old copy of msvcrt.dll which has these personalities, so things should work out, or so I hear. I haven't tested it. Modified: cfe/trunk/lib/CodeGen/CGException.cpp cfe/trunk/test/CodeGen/exceptions-seh-new.c Modified: cfe/trunk/lib/CodeGen/CGException.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=247902&r1=247901&r2=247902&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGException.cpp (original) +++ cfe/trunk/lib/CodeGen/CGException.cpp Thu Sep 17 12:04:13 2015 @@ -189,14 +189,16 @@ const EHPersonality &EHPersonality::get( const llvm::Triple &T = CGM.getTarget().getTriple(); const LangOptions &L = CGM.getLangOpts(); + // Functions using SEH get an SEH personality. + if (FD && FD->usesSEHTry()) + return getSEHPersonalityMSVC(T); + // Try to pick a personality function that is compatible with MSVC if we're // not compiling Obj-C. Obj-C users better have an Obj-C runtime that supports // the GCC-style personality function. if (T.isWindowsMSVCEnvironment() && !L.ObjC1) { if (L.SjLjExceptions) return EHPersonality::GNU_CPlusPlus_SJLJ; - else if (FD && FD->usesSEHTry()) - return getSEHPersonalityMSVC(T); else return EHPersonality::MSVC_CxxFrameHandler3; } Modified: cfe/trunk/test/CodeGen/exceptions-seh-new.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/exceptions-seh-new.c?rev=247902&r1=247901&r2=247902&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/exceptions-seh-new.c (original) +++ cfe/trunk/test/CodeGen/exceptions-seh-new.c Thu Sep 17 12:04:13 2015 @@ -2,6 +2,10 @@ // RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=X64 // RUN: %clang_cc1 %s -triple i686-pc-win32 -fms-extensions -fnew-ms-eh -emit-llvm -o - \ // RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=X86 +// RUN: %clang_cc1 %s -triple i686-pc-windows-gnu -fms-extensions -fnew-ms-eh -emit-llvm -o - \ +// RUN: | FileCheck %s --check-prefix=X86-GNU +// RUN: %clang_cc1 %s -triple x86_64-pc-windows-gnu -fms-extensions -fnew-ms-eh -emit-llvm -o - \ +// RUN: | FileCheck %s --check-prefix=X64-GNU void try_body(int numerator, int denominator, int *myres) { *myres = numerator / denominator; @@ -55,6 +59,12 @@ int safe_div(int numerator, int denomina // X86: store i32 %{{.*}}, i32* // X86: ret i32 1 +// Mingw uses msvcrt, so it can also use _except_handler3. +// X86-GNU-LABEL: define i32 @safe_div(i32 %numerator, i32 %denominator, i32* %res) +// X86-GNU-SAME: personality i8* bitcast (i32 (...)* @_except_handler3 to i8*) +// X64-GNU-LABEL: define i32 @safe_div(i32 %numerator, i32 %denominator, i32* %res) +// X64-GNU-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*) + void j(void); int filter_expr_capture(void) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits