1; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=function-data --test FileCheck --test-arg --check-prefixes=CHECK,INTERESTING --test-arg %s --test-arg --input-file %s -o %t 2; RUN: FileCheck -check-prefixes=CHECK,RESULT %s < %t 3 4; INTERESTING: define void @drop_personality( 5; RESULT: define void @drop_personality() { 6define void @drop_personality() personality ptr @__gxx_personality_v0 { 7 ret void 8} 9 10; CHECK: define void @keep_personality() personality ptr @__gxx_personality_v0 { 11define void @keep_personality() personality ptr @__gxx_personality_v0 { 12 ret void 13} 14 15; Make sure an invalid reduction isn't produced if we need a 16; personality function for different instructions 17 18; CHECK: define void @landingpad_requires_personality() 19; RESULT-SAME: personality ptr @__gxx_personality_v0 { 20define void @landingpad_requires_personality() personality ptr @__gxx_personality_v0 { 21bb0: 22 br label %bb2 23 24bb1: 25 landingpad { ptr, i32 } 26 catch ptr null 27 ret void 28 29bb2: 30 ret void 31} 32 33; CHECK-LABEL: define void @uses_catchpad() 34; RESULT-SAME: personality ptr @__CxxFrameHandler3 { 35define void @uses_catchpad() personality ptr @__CxxFrameHandler3 { 36entry: 37 br label %unreachable 38 39catch.dispatch: 40 %cs = catchswitch within none [label %catch] unwind to caller 41 42catch: 43 %cp = catchpad within %cs [ptr null, i32 64, ptr null] 44 br label %unreachable 45 46unreachable: 47 unreachable 48} 49 50; CHECK-LABEL: define void @uses_resume() 51; RESULT-SAME: personality ptr @__gxx_personality_v0 52define void @uses_resume() personality ptr @__gxx_personality_v0 { 53entry: 54 resume { ptr, i32 } zeroinitializer 55} 56 57declare i32 @__gxx_personality_v0(...) 58declare i32 @__CxxFrameHandler3(...) 59