| ; RUN: llc -mtriple=x86_64-pc-windows-msvc < %s | FileCheck %s |
| |
| ; A personality that is not a function leaves nothing to emit a symbol for, so |
| ; no personality or handler data should be produced. This used to crash the |
| ; X86 assembly printer. |
| |
| ; CHECK-LABEL: null_personality: |
| ; CHECK-NOT: .seh_handler |
| ; CHECK: retq |
| |
| define void @null_personality() personality ptr null { |
| ret void |
| } |
| |
| ; A real personality with a landing pad still emits its handler as before. |
| |
| ; CHECK-LABEL: real_personality: |
| ; CHECK: .seh_handler __CxxFrameHandler3 |
| |
| declare void @g() |
| declare i32 @__CxxFrameHandler3(...) |
| |
| define void @real_personality() personality ptr @__CxxFrameHandler3 { |
| entry: |
| invoke void @g() |
| to label %cont unwind label %catch |
| |
| cont: |
| ret void |
| |
| catch: |
| %cs = catchswitch within none [label %handler] unwind to caller |
| |
| handler: |
| %cp = catchpad within %cs [ptr null, i32 64, ptr null] |
| catchret from %cp to label %cont |
| } |