[ARM] Fix SJLJ exception handling when manually chosen on a platform where it isn't default
Differential Revision: https://reviews.llvm.org/D38252
llvm-svn: 314450
diff --git a/llvm/lib/Target/ARM/ARMSubtarget.cpp b/llvm/lib/Target/ARM/ARMSubtarget.cpp
index e440957..a8546ec 100644
--- a/llvm/lib/Target/ARM/ARMSubtarget.cpp
+++ b/llvm/lib/Target/ARM/ARMSubtarget.cpp
@@ -150,7 +150,9 @@
// MCAsmInfo isn't always present (e.g. in opt) so we can't initialize this
// directly from it, but we can try to make sure they're consistent when both
// available.
- UseSjLjEH = isTargetDarwin() && !isTargetWatchABI();
+ UseSjLjEH = (isTargetDarwin() && !isTargetWatchABI() &&
+ Options.ExceptionModel == ExceptionHandling::None) ||
+ Options.ExceptionModel == ExceptionHandling::SjLj;
assert((!TM.getMCAsmInfo() ||
(TM.getMCAsmInfo()->getExceptionHandlingType() ==
ExceptionHandling::SjLj) == UseSjLjEH) &&
diff --git a/llvm/test/CodeGen/ARM/sjljehprepare-lower-empty-struct.ll b/llvm/test/CodeGen/ARM/sjljehprepare-lower-empty-struct.ll
index 323d503..a2b986e 100644
--- a/llvm/test/CodeGen/ARM/sjljehprepare-lower-empty-struct.ll
+++ b/llvm/test/CodeGen/ARM/sjljehprepare-lower-empty-struct.ll
@@ -4,6 +4,7 @@
; RUN: llc -mtriple=armv7-apple-ios -O3 < %s | FileCheck %s
; RUN: llc -mtriple=armv7-apple-watchos -O3 < %s | FileCheck %s
; RUN: llc -mtriple=armv7k-apple-ios < %s | FileCheck %s --check-prefix=CHECK-WATCH
+; RUN: llc -mtriple=armv7-linux -exception-model sjlj -O3 < %s | FileCheck %s --check-prefix=CHECK-LINUX
; SjLjEHPrepare shouldn't crash when lowering empty structs.
;
@@ -17,6 +18,12 @@
; CHECK: bl __Unwind_SjLj_Register
; CHECK-NEXT: {{[A-Z][a-zA-Z0-9]*}}:
; CHECK-NEXT: bl _bar
+; CHECK: bl __Unwind_SjLj_Resume
+
+; CHECK-LINUX: bl _Unwind_SjLj_Register
+; CHECK-LINUX-NEXT: .{{[A-Z][a-zA-Z0-9]*}}:
+; CHECK-LINUX-NEXT: bl bar
+; CHECK-LINUX: bl _Unwind_SjLj_Resume
; CHECK-WATCH-NOT: bl __Unwind_SjLj_Register