1 ; RUN: llvm-as < %s | llvm-dis > %t1.ll 2 ; RUN: llvm-as %t1.ll -o - | llvm-dis > %t2.ll 3 ; RUN: diff %t1.ll %t2.ll 4 5 @_ZTIc = external constant i8* 6 @_ZTId = external constant i8* 7 @_ZTIPKc = external constant i8* 8 9 define void @_Z3barv() uwtable optsize ssp personality i32 (...)* @__gxx_personality_v0 { 10 entry: 11 invoke void @_Z3quxv() optsize 12 to label %try.cont unwind label %lpad 13 14 try.cont: ; preds = %entry, %invoke.cont4 15 ret void 16 17 lpad: ; preds = %entry 18 %exn = landingpad {i8*, i32} 19 cleanup 20 catch i8** @_ZTIc 21 filter [2 x i8**] [i8** @_ZTIPKc, i8** @_ZTId] 22 resume { i8*, i32 } %exn 23 } 24 25 declare void @_Z3quxv() optsize 26 27 declare i32 @__gxx_personality_v0(...) 28 29 define void @cleanupret0() personality i32 (...)* @__gxx_personality_v0 { 30 entry: 31 invoke void @_Z3quxv() optsize 32 to label %exit unwind label %pad 33 pad: 34 %cp = cleanuppad within none [i7 4] 35 cleanupret from %cp unwind to caller 36 exit: 37 ret void 38 } 39 40 ; forward ref by name 41 define void @cleanupret1() personality i32 (...)* @__gxx_personality_v0 { 42 entry: 43 invoke void @_Z3quxv() optsize 44 to label %exit unwind label %pad 45 cleanup: 46 cleanupret from %cp unwind label %pad 47 pad: 48 %cp = cleanuppad within none [] 49 br label %cleanup 50 exit: 51 ret void 52 } 53 54 ; forward ref by ID 55 define void @cleanupret2() personality i32 (...)* @__gxx_personality_v0 { 56 entry: 57 invoke void @_Z3quxv() optsize 58 to label %exit unwind label %pad 59 cleanup: 60 cleanupret from %0 unwind label %pad 61 pad: 62 %0 = cleanuppad within none [] 63 br label %cleanup 64 exit: 65 ret void 66 } 67 68 define void @catchret0() personality i32 (...)* @__gxx_personality_v0 { 69 entry: 70 invoke void @_Z3quxv() optsize 71 to label %exit unwind label %pad 72 pad: 73 %cs1 = catchswitch within none [label %catch] unwind to caller 74 catch: 75 %cp = catchpad within %cs1 [i7 4] 76 catchret from %cp to label %exit 77 exit: 78 ret void 79 } 80 81 ; forward ref by name 82 define void @catchret1() personality i32 (...)* @__gxx_personality_v0 { 83 entry: 84 invoke void @_Z3quxv() optsize 85 to label %exit unwind label %pad 86 catchret: 87 catchret from %cp to label %exit 88 pad: 89 %cs1 = catchswitch within none [label %catch] unwind to caller 90 catch: 91 %cp = catchpad within %cs1 [i7 4] 92 br label %catchret 93 exit: 94 ret void 95 } 96 97 ; forward ref by ID 98 define void @catchret2() personality i32 (...)* @__gxx_personality_v0 { 99 entry: 100 invoke void @_Z3quxv() optsize 101 to label %exit unwind label %pad 102 catchret: 103 catchret from %0 to label %exit 104 pad: 105 %cs1 = catchswitch within none [label %catch] unwind to caller 106 catch: 107 %0 = catchpad within %cs1 [i7 4] 108 br label %catchret 109 exit: 110 ret void 111 } 112 113 define i8 @catchpad() personality i32 (...)* @__gxx_personality_v0 { 114 entry: 115 invoke void @_Z3quxv() optsize 116 to label %exit unwind label %bb2 117 bb2: 118 %cs1 = catchswitch within none [label %catch] unwind to caller 119 catch: 120 catchpad within %cs1 [i7 4] 121 br label %exit 122 exit: 123 ret i8 0 124 } 125 126 define void @cleanuppad() personality i32 (...)* @__gxx_personality_v0 { 127 entry: 128 br label %try.cont 129 130 try.cont: 131 invoke void @_Z3quxv() optsize 132 to label %try.cont unwind label %bb 133 bb: 134 cleanuppad within none [i7 4] 135 ret void 136 } 137