[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:
parent
5c3e8a450e
commit
adceba59a2
|
@ -150,7 +150,9 @@ void ARMSubtarget::initializeEnvironment() {
|
||||||
// MCAsmInfo isn't always present (e.g. in opt) so we can't initialize this
|
// 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
|
// directly from it, but we can try to make sure they're consistent when both
|
||||||
// available.
|
// available.
|
||||||
UseSjLjEH = isTargetDarwin() && !isTargetWatchABI();
|
UseSjLjEH = (isTargetDarwin() && !isTargetWatchABI() &&
|
||||||
|
Options.ExceptionModel == ExceptionHandling::None) ||
|
||||||
|
Options.ExceptionModel == ExceptionHandling::SjLj;
|
||||||
assert((!TM.getMCAsmInfo() ||
|
assert((!TM.getMCAsmInfo() ||
|
||||||
(TM.getMCAsmInfo()->getExceptionHandlingType() ==
|
(TM.getMCAsmInfo()->getExceptionHandlingType() ==
|
||||||
ExceptionHandling::SjLj) == UseSjLjEH) &&
|
ExceptionHandling::SjLj) == UseSjLjEH) &&
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
; RUN: llc -mtriple=armv7-apple-ios -O3 < %s | FileCheck %s
|
; RUN: llc -mtriple=armv7-apple-ios -O3 < %s | FileCheck %s
|
||||||
; RUN: llc -mtriple=armv7-apple-watchos -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=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.
|
; SjLjEHPrepare shouldn't crash when lowering empty structs.
|
||||||
;
|
;
|
||||||
|
@ -17,6 +18,12 @@ entry:
|
||||||
; CHECK: bl __Unwind_SjLj_Register
|
; CHECK: bl __Unwind_SjLj_Register
|
||||||
; CHECK-NEXT: {{[A-Z][a-zA-Z0-9]*}}:
|
; CHECK-NEXT: {{[A-Z][a-zA-Z0-9]*}}:
|
||||||
; CHECK-NEXT: bl _bar
|
; 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
|
; CHECK-WATCH-NOT: bl __Unwind_SjLj_Register
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue