diff options
| -rw-r--r-- | llvm/lib/Target/ARM/ARMSubtarget.cpp | 4 | ||||
| -rw-r--r-- | llvm/test/CodeGen/ARM/sjljehprepare-lower-empty-struct.ll | 7 |
2 files changed, 10 insertions, 1 deletions
diff --git a/llvm/lib/Target/ARM/ARMSubtarget.cpp b/llvm/lib/Target/ARM/ARMSubtarget.cpp index e440957269f..a8546ec40a6 100644 --- a/llvm/lib/Target/ARM/ARMSubtarget.cpp +++ b/llvm/lib/Target/ARM/ARMSubtarget.cpp @@ -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) && diff --git a/llvm/test/CodeGen/ARM/sjljehprepare-lower-empty-struct.ll b/llvm/test/CodeGen/ARM/sjljehprepare-lower-empty-struct.ll index 323d5037138..a2b986effba 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 @@ 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 |

