[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
This commit is contained in:
Martin Storsjo 2017-09-28 19:04:14 +00:00
parent 5c3e8a450e
commit adceba59a2
2 changed files with 10 additions and 1 deletions

View File

@ -150,7 +150,9 @@ void ARMSubtarget::initializeEnvironment() {
// 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) &&

View File

@ -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 @@ entry:
; 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