Disable 32-bit SEH, again
authorReid Kleckner <reid@kleckner.net>
Wed, 8 Jul 2015 23:57:03 +0000 (23:57 +0000)
committerReid Kleckner <reid@kleckner.net>
Wed, 8 Jul 2015 23:57:03 +0000 (23:57 +0000)
Move the diagnostic back to codegen so that we can compile ATL on the
self-host bot. We don't actually end up emitting code for the __try, so
the diagnostic won't be hit.

llvm-svn: 241761

clang/include/clang/Basic/TargetInfo.h
clang/lib/CodeGen/CGException.cpp
clang/lib/Sema/SemaStmt.cpp
clang/test/CodeGen/exceptions-seh-finally.c
clang/test/CodeGen/exceptions-seh.c

index fed69a8..2c32e8c 100644 (file)
@@ -812,8 +812,7 @@ public:
   /// \brief Whether the target supports SEH __try.
   bool isSEHTrySupported() const {
     return getTriple().isOSWindows() &&
-           (getTriple().getArch() == llvm::Triple::x86 ||
-            getTriple().getArch() == llvm::Triple::x86_64);
+           getTriple().getArch() == llvm::Triple::x86_64;
   }
 
   /// \brief Return true if {|} are normal characters in the asm string.
index 987ffc1..c7e3ed5 100644 (file)
@@ -1280,6 +1280,10 @@ llvm::BasicBlock *CodeGenFunction::getEHResumeBlock(bool isCleanup) {
 }
 
 void CodeGenFunction::EmitSEHTryStmt(const SEHTryStmt &S) {
+  // Reject __try on unsupported targets.
+  if (!getContext().getTargetInfo().isSEHTrySupported())
+    ErrorUnsupported(&S, "SEH '__try' on this target");
+
   EnterSEHTryStmt(S);
   {
     JumpDest TryExit = getJumpDestInCurrentScope("__try.__leave");
index c4f6fd8..3ffedf2 100644 (file)
@@ -3650,10 +3650,6 @@ StmtResult Sema::ActOnSEHTryBlock(bool IsCXXTry, SourceLocation TryLoc,
   else
     Diag(TryLoc, diag::err_seh_try_outside_functions);
 
-  // Reject __try on unsupported targets.
-  if (!Context.getTargetInfo().isSEHTrySupported())
-    Diag(TryLoc, diag::err_seh_try_unsupported);
-
   return SEHTryStmt::Create(Context, IsCXXTry, TryLoc, TryBlock, Handler);
 }
 
index 772e283..513a1f3 100644 (file)
@@ -1,5 +1,6 @@
 // RUN: %clang_cc1 %s -triple x86_64-pc-win32 -fms-extensions -emit-llvm -o - | FileCheck %s
-// RUN: %clang_cc1 %s -triple i686-pc-win32 -fms-extensions -emit-llvm -o - | FileCheck %s
+// FIXME: Re-enable 32-bit SEH.
+// RUNX: %clang_cc1 %s -triple i686-pc-win32 -fms-extensions -emit-llvm -o - | FileCheck %s
 
 void abort(void) __attribute__((noreturn));
 void might_crash(void);
index 9707a9a..702125b 100644 (file)
@@ -1,7 +1,8 @@
 // RUN: %clang_cc1 %s -triple x86_64-pc-win32 -fms-extensions -emit-llvm -o - \
 // RUN:         | FileCheck %s --check-prefix=CHECK --check-prefix=X64
-// RUN: %clang_cc1 %s -triple i686-pc-win32 -fms-extensions -emit-llvm -o - \
-// RUN:         | FileCheck %s --check-prefix=CHECK --check-prefix=X86
+// FIXME: Re-enable 32-bit SEH.
+// RUNX: %clang_cc1 %s -triple i686-pc-win32 -fms-extensions -emit-llvm -o - \
+// RUNX:         | FileCheck %s --check-prefix=CHECK --check-prefix=X86
 
 void try_body(int numerator, int denominator, int *myres) {
   *myres = numerator / denominator;