summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2015-07-08 23:57:03 +0000
committerReid Kleckner <reid@kleckner.net>2015-07-08 23:57:03 +0000
commite7844ea7f86127a21686e2392da55ffa533d83dd (patch)
treecb6265c671b0e911acf64d14a01e94c5d0ddabaa /clang
parent13194461958672e09a4b0608186c7793a6aaf241 (diff)
downloadbcm5719-llvm-e7844ea7f86127a21686e2392da55ffa533d83dd.tar.gz
bcm5719-llvm-e7844ea7f86127a21686e2392da55ffa533d83dd.zip
Disable 32-bit SEH, again
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
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Basic/TargetInfo.h3
-rw-r--r--clang/lib/CodeGen/CGException.cpp4
-rw-r--r--clang/lib/Sema/SemaStmt.cpp4
-rw-r--r--clang/test/CodeGen/exceptions-seh-finally.c3
-rw-r--r--clang/test/CodeGen/exceptions-seh.c5
5 files changed, 10 insertions, 9 deletions
diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h
index fed69a8281e..2c32e8c22bf 100644
--- a/clang/include/clang/Basic/TargetInfo.h
+++ b/clang/include/clang/Basic/TargetInfo.h
@@ -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.
diff --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp
index 987ffc14a45..c7e3ed5c348 100644
--- a/clang/lib/CodeGen/CGException.cpp
+++ b/clang/lib/CodeGen/CGException.cpp
@@ -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");
diff --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index c4f6fd8df1c..3ffedf28ad5 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -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);
}
diff --git a/clang/test/CodeGen/exceptions-seh-finally.c b/clang/test/CodeGen/exceptions-seh-finally.c
index 772e28306b5..513a1f3c89a 100644
--- a/clang/test/CodeGen/exceptions-seh-finally.c
+++ b/clang/test/CodeGen/exceptions-seh-finally.c
@@ -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);
diff --git a/clang/test/CodeGen/exceptions-seh.c b/clang/test/CodeGen/exceptions-seh.c
index 9707a9a31be..702125b07a6 100644
--- a/clang/test/CodeGen/exceptions-seh.c
+++ b/clang/test/CodeGen/exceptions-seh.c
@@ -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;
OpenPOWER on IntegriCloud