1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=armv7-apple-ios | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; This testcase makes sure we can handle invoke @llvm.donothing without 3*9880d681SAndroid Build Coastguard Worker; assertion failure. 4*9880d681SAndroid Build Coastguard Worker; <rdar://problem/13228754> & <rdar://problem/13316637> 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _foo 7*9880d681SAndroid Build Coastguard Workerdefine void @foo() personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) { 8*9880d681SAndroid Build Coastguard Workerinvoke.cont: 9*9880d681SAndroid Build Coastguard Worker invoke void @callA() 10*9880d681SAndroid Build Coastguard Worker to label %invoke.cont25 unwind label %lpad2 11*9880d681SAndroid Build Coastguard Workerinvoke.cont25: 12*9880d681SAndroid Build Coastguard Worker invoke void @llvm.donothing() 13*9880d681SAndroid Build Coastguard Worker to label %invoke.cont27 unwind label %lpad15 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerinvoke.cont27: 16*9880d681SAndroid Build Coastguard Worker invoke void @callB() 17*9880d681SAndroid Build Coastguard Worker to label %invoke.cont75 unwind label %lpad15 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerinvoke.cont75: 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerlpad2: 23*9880d681SAndroid Build Coastguard Worker %0 = landingpad { i8*, i32 } 24*9880d681SAndroid Build Coastguard Worker cleanup 25*9880d681SAndroid Build Coastguard Worker br label %eh.resume 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Workerlpad15: 28*9880d681SAndroid Build Coastguard Worker %1 = landingpad { i8*, i32 } 29*9880d681SAndroid Build Coastguard Worker cleanup 30*9880d681SAndroid Build Coastguard Worker br label %eh.resume 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workereh.resume: 33*9880d681SAndroid Build Coastguard Worker resume { i8*, i32 } zeroinitializer 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Worker; CHECK: .globl _bar 37*9880d681SAndroid Build Coastguard Workerdefine linkonce_odr void @bar(i32* %a) personality i8* bitcast (i32 (...)* @__gxx_personality_sj0 to i8*) { 38*9880d681SAndroid Build Coastguard Workerif.end.i.i.i: 39*9880d681SAndroid Build Coastguard Worker invoke void @llvm.donothing() 40*9880d681SAndroid Build Coastguard Worker to label %call.i.i.i.noexc unwind label %eh.resume 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workercall.i.i.i.noexc: 43*9880d681SAndroid Build Coastguard Worker br i1 false, label %cleanup, label %new.notnull.i.i 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workernew.notnull.i.i: 46*9880d681SAndroid Build Coastguard Worker br label %cleanup 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workercleanup: 49*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* %a, align 4 50*9880d681SAndroid Build Coastguard Worker %inc294 = add nsw i32 %0, 4 51*9880d681SAndroid Build Coastguard Worker store i32 %inc294, i32* %a, align 4 52*9880d681SAndroid Build Coastguard Worker br i1 false, label %_ZN3lol5ArrayIivvvvvvvED1Ev.exit, label %delete.notnull.i.i.i1409 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdelete.notnull.i.i.i1409: 55*9880d681SAndroid Build Coastguard Worker br label %_ZN3lol5ArrayIivvvvvvvED1Ev.exit 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker_ZN3lol5ArrayIivvvvvvvED1Ev.exit: 58*9880d681SAndroid Build Coastguard Worker ret void 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workereh.resume: 61*9880d681SAndroid Build Coastguard Worker %1 = landingpad { i8*, i32 } 62*9880d681SAndroid Build Coastguard Worker cleanup 63*9880d681SAndroid Build Coastguard Worker %2 = extractvalue { i8*, i32 } %1, 0 64*9880d681SAndroid Build Coastguard Worker %3 = extractvalue { i8*, i32 } %1, 1 65*9880d681SAndroid Build Coastguard Worker %lpad.val = insertvalue { i8*, i32 } undef, i8* %2, 0 66*9880d681SAndroid Build Coastguard Worker %lpad.val395 = insertvalue { i8*, i32 } %lpad.val, i32 %3, 1 67*9880d681SAndroid Build Coastguard Worker resume { i8*, i32 } %lpad.val395 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdeclare void @callA() 71*9880d681SAndroid Build Coastguard Workerdeclare void @callB() 72*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.donothing() nounwind readnone 73*9880d681SAndroid Build Coastguard Workerdeclare i32 @__gxx_personality_sj0(...) 74