256 lines · plain
1; RUN: llc -verify-machineinstrs < %s | FileCheck %s2 3; CHECK-LABEL: "$cppxdata$?crash@@YAXH@Z":4; CHECK: .long "$stateUnwindMap$?crash@@YAXH@Z"5; CHECK: .long "$ip2state$?crash@@YAXH@Z"6 7; CHECK-LABEL: "$stateUnwindMap$?crash@@YAXH@Z":8; CHECK: .long -19; CHECK: .long "?dtor$10; CHECK: .long 011; CHECK: .long "?dtor$12; CHECK: .long 113; CHECK: .long "?dtor$14 15; CHECK-LABEL: "$ip2state$?crash@@YAXH@Z":16; CHECK-NEXT: .long .Lfunc_begin0@IMGREL17; CHECK-NEXT: .long -118; CHECK-NEXT: .long .Ltmp19; CHECK-NEXT: .long 020; CHECK-NEXT: .long .Ltmp21; CHECK-NEXT: .long 122; CHECK-NEXT: .long .Ltmp23; CHECK-NEXT: .long 224; CHECK-NEXT: .long .Ltmp25; CHECK-NEXT: .long 126; CHECK-NEXT: .long .Ltmp27; CHECK-NEXT: .long 028; CHECK-NEXT: .long .Ltmp29; CHECK-NEXT: .long -130 31; ModuleID = 'windows-seh-EHa-CppDtors01.cpp'32source_filename = "windows-seh-EHa-CppDtors01.cpp"33target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"34target triple = "x86_64-unknown-windows-msvc"35 36%struct.A = type { i8 }37%struct.B = type { i8 }38%struct.C = type { i8 }39 40$"??_C@_0CM@KAOHJHDK@?5Test?5CPP?5unwind?3?5in?5catch?5handl@" = comdat any41 42$"??_C@_0N@FCCEEGKL@?5in?5C?5dtor?5?6?$AA@" = comdat any43 44$"??_C@_0N@EFFPFCOI@?5in?5B?5dtor?5?6?$AA@" = comdat any45 46$"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@" = comdat any47 48@"?g@@3HA" = dso_local global i32 0, align 449@"??_C@_0CM@KAOHJHDK@?5Test?5CPP?5unwind?3?5in?5catch?5handl@" = linkonce_odr dso_local unnamed_addr constant [44 x i8] c" Test CPP unwind: in catch handler i = %d \0A\00", comdat, align 150@"??_C@_0N@FCCEEGKL@?5in?5C?5dtor?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [13 x i8] c" in C dtor \0A\00", comdat, align 151@"??_C@_0N@EFFPFCOI@?5in?5B?5dtor?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [13 x i8] c" in B dtor \0A\00", comdat, align 152@"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@" = linkonce_odr dso_local unnamed_addr constant [13 x i8] c" in A dtor \0A\00", comdat, align 153 54; Function Attrs: noinline optnone55define dso_local void @"?crash@@YAXH@Z"(i32 %i) #0 personality ptr @__CxxFrameHandler3 {56entry:57 %i.addr = alloca i32, align 458 %ObjA = alloca %struct.A, align 159 %ObjB = alloca %struct.B, align 160 %ObjC = alloca %struct.C, align 161 store i32 %i, ptr %i.addr, align 462 invoke void @llvm.seh.scope.begin()63 to label %invoke.cont unwind label %ehcleanup1364 65invoke.cont: ; preds = %entry66 %0 = load i32, ptr %i.addr, align 467 %cmp = icmp eq i32 %0, 068 br i1 %cmp, label %if.then, label %if.end69 70if.then: ; preds = %invoke.cont71 store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 472 br label %if.end73 74if.end: ; preds = %if.then, %invoke.cont75 invoke void @llvm.seh.scope.begin()76 to label %invoke.cont1 unwind label %ehcleanup1177 78invoke.cont1: ; preds = %if.end79 %1 = load i32, ptr %i.addr, align 480 %cmp2 = icmp eq i32 %1, 181 br i1 %cmp2, label %if.then3, label %if.end482 83if.then3: ; preds = %invoke.cont184 store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 485 br label %if.end486 87if.end4: ; preds = %if.then3, %invoke.cont188 invoke void @llvm.seh.scope.begin()89 to label %invoke.cont5 unwind label %ehcleanup90 91invoke.cont5: ; preds = %if.end492 %2 = load i32, ptr %i.addr, align 493 %cmp6 = icmp eq i32 %2, 294 br i1 %cmp6, label %if.then7, label %if.end895 96if.then7: ; preds = %invoke.cont597 store volatile i32 0, ptr inttoptr (i64 17 to ptr), align 498 br label %if.end899 100if.end8: ; preds = %if.then7, %invoke.cont5101 invoke void @llvm.seh.scope.end()102 to label %invoke.cont9 unwind label %ehcleanup103 104invoke.cont9: ; preds = %if.end8105 call void @"??1C@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjC) #6106 invoke void @llvm.seh.scope.end()107 to label %invoke.cont10 unwind label %ehcleanup11108 109invoke.cont10: ; preds = %invoke.cont9110 call void @"??1B@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjB) #6111 invoke void @llvm.seh.scope.end()112 to label %invoke.cont12 unwind label %ehcleanup13113 114invoke.cont12: ; preds = %invoke.cont10115 call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjA) #6116 ret void117 118ehcleanup: ; preds = %if.end8, %if.end4119 %3 = cleanuppad within none []120 call void @"??1C@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjC) #6 [ "funclet"(token %3) ]121 cleanupret from %3 unwind label %ehcleanup11122 123ehcleanup11: ; preds = %invoke.cont9, %ehcleanup, %if.end124 %4 = cleanuppad within none []125 call void @"??1B@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjB) #6 [ "funclet"(token %4) ]126 cleanupret from %4 unwind label %ehcleanup13127 128ehcleanup13: ; preds = %invoke.cont10, %ehcleanup11, %entry129 %5 = cleanuppad within none []130 call void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %ObjA) #6 [ "funclet"(token %5) ]131 cleanupret from %5 unwind to caller132}133 134; Function Attrs: nounwind readnone135declare dso_local void @llvm.seh.scope.begin() #1136 137declare dso_local i32 @__CxxFrameHandler3(...)138 139; Function Attrs: nounwind readnone140declare dso_local void @llvm.seh.scope.end() #1141 142; Function Attrs: noinline nounwind optnone143define internal void @"??1C@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %this) unnamed_addr #2 align 2 {144entry:145 %this.addr = alloca ptr, align 8146 store ptr %this, ptr %this.addr, align 8147 %this1 = load ptr, ptr %this.addr, align 8148 call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@FCCEEGKL@?5in?5C?5dtor?5?6?$AA@")149 ret void150}151 152; Function Attrs: noinline nounwind optnone153define internal void @"??1B@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %this) unnamed_addr #2 align 2 {154entry:155 %this.addr = alloca ptr, align 8156 store ptr %this, ptr %this.addr, align 8157 %this1 = load ptr, ptr %this.addr, align 8158 call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@EFFPFCOI@?5in?5B?5dtor?5?6?$AA@")159 ret void160}161 162; Function Attrs: noinline nounwind optnone163define internal void @"??1A@?1??crash@@YAXH@Z@QEAA@XZ"(ptr %this) unnamed_addr #2 align 2 {164entry:165 %this.addr = alloca ptr, align 8166 store ptr %this, ptr %this.addr, align 8167 %this1 = load ptr, ptr %this.addr, align 8168 call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0N@HMNCGOCN@?5in?5A?5dtor?5?6?$AA@")169 ret void170}171 172; Function Attrs: noinline norecurse optnone173define dso_local i32 @main() #3 personality ptr @__C_specific_handler {174entry:175 %retval = alloca i32, align 4176 %i = alloca i32, align 4177 %__exception_code = alloca i32, align 4178 store i32 0, ptr %retval, align 4179 store i32 0, ptr %i, align 4180 br label %for.cond181 182for.cond: ; preds = %for.inc, %entry183 %0 = load i32, ptr %i, align 4184 %cmp = icmp slt i32 %0, 3185 br i1 %cmp, label %for.body, label %for.end186 187for.body: ; preds = %for.cond188 invoke void @llvm.seh.try.begin()189 to label %invoke.cont unwind label %catch.dispatch190 191invoke.cont: ; preds = %for.body192 %1 = load volatile i32, ptr %i, align 4193 invoke void @"?crash@@YAXH@Z"(i32 %1) #7194 to label %invoke.cont1 unwind label %catch.dispatch195 196invoke.cont1: ; preds = %invoke.cont197 invoke void @llvm.seh.try.end()198 to label %invoke.cont2 unwind label %catch.dispatch199 200catch.dispatch: ; preds = %invoke.cont1, %invoke.cont, %for.body201 %2 = catchswitch within none [label %__except] unwind to caller202 203__except: ; preds = %catch.dispatch204 %3 = catchpad within %2 [ptr null]205 catchret from %3 to label %__except3206 207__except3: ; preds = %__except208 %4 = call i32 @llvm.eh.exceptioncode(token %3)209 store i32 %4, ptr %__exception_code, align 4210 %5 = load i32, ptr %i, align 4211 call void (...) @"?printf@@YAXZZ"(ptr @"??_C@_0CM@KAOHJHDK@?5Test?5CPP?5unwind?3?5in?5catch?5handl@", i32 %5)212 br label %__try.cont213 214__try.cont: ; preds = %__except3, %invoke.cont2215 br label %for.inc216 217for.inc: ; preds = %__try.cont218 %6 = load i32, ptr %i, align 4219 %inc = add nsw i32 %6, 1220 store i32 %inc, ptr %i, align 4221 br label %for.cond222 223invoke.cont2: ; preds = %invoke.cont1224 br label %__try.cont225 226for.end: ; preds = %for.cond227 ret i32 0228}229 230; Function Attrs: nounwind willreturn231declare dso_local void @llvm.seh.try.begin() #4232 233declare dso_local i32 @__C_specific_handler(...)234 235; Function Attrs: nounwind willreturn236declare dso_local void @llvm.seh.try.end() #4237 238; Function Attrs: nounwind readnone239declare i32 @llvm.eh.exceptioncode(token) #1240 241declare dso_local void @"?printf@@YAXZZ"(...) #5242 243attributes #0 = { noinline optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" "use-soft-float"="false" }244attributes #1 = { nounwind readnone }245attributes #2 = { noinline nounwind optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" "use-soft-float"="false" }246attributes #3 = { noinline norecurse optnone "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" "use-soft-float"="false" }247attributes #4 = { nounwind willreturn }248attributes #5 = { "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" "use-soft-float"="false" }249attributes #6 = { nounwind }250attributes #7 = { noinline }251 252!llvm.module.flags = !{!0, !1}253 254!0 = !{i32 1, !"wchar_size", i32 2}255!1 = !{i32 2, !"eh-asynch", i32 1}256