| ; RUN: llc -o - %s -mtriple=x86_64-windows-msvc | FileCheck %s --check-prefixes=CHECK,TRAP_AFTER_NORETURN |
| ; RUN: llc -o - %s -mtriple=x86_64-apple-darwin | FileCheck %s --check-prefixes=CHECK,NO_TRAP_AFTER_NORETURN |
| |
| ; CHECK-LABEL: call_exit: |
| ; CHECK: callq {{_?}}exit |
| ; TRAP_AFTER_NORETURN: ud2 |
| ; NO_TRAP_AFTER_NORETURN-NOT: ud2 |
| define i32 @call_exit() noreturn nounwind { |
| tail call void @exit(i32 0) |
| unreachable |
| } |
| |
| ; CHECK-LABEL: trap: |
| ; CHECK: ud2 |
| ; TRAP_AFTER_NORETURN: ud2 |
| ; NO_TRAP_AFTER_NORETURN-NOT: ud2 |
| define i32 @trap() noreturn nounwind { |
| tail call void @llvm.trap() |
| unreachable |
| } |
| |
| ; CHECK-LABEL: unreachable: |
| ; CHECK: ud2 |
| define i32 @unreachable() noreturn nounwind { |
| unreachable |
| } |
| |
| declare void @llvm.trap() nounwind noreturn |
| declare void @exit(i32 %rc) nounwind noreturn |