@@ -177,7 +177,7 @@ cond.true: ; preds = %entry
177
177
%call = invoke i32 @foo_noreturn () to label %continue
178
178
unwind label %cleanup
179
179
; CHECK: %call = invoke i32 @foo_noreturn()
180
- ; CHECK-NEXT: to label %continue unwind label %cleanup
180
+ ; CHECK-NEXT: to label %continue.dead unwind label %cleanup
181
181
182
182
cond.false: ; preds = %entry
183
183
call void @normal_call ()
@@ -189,7 +189,7 @@ cond.end: ; preds = %cond.false, %contin
189
189
ret i32 %cond
190
190
191
191
continue:
192
- ; CHECK: continue:
192
+ ; CHECK: continue.dead :
193
193
; CHECK-NEXT: unreachable
194
194
br label %cond.end
195
195
@@ -663,3 +663,59 @@ define internal void @dead_e2() { ret void }
663
663
; CHECK: Function Attrs: nofree nosync nounwind willreturn
664
664
; CHECK-NEXT: define internal void @non_dead_d15()
665
665
; CHECK-NOT: define internal void @dead_e
666
+
667
+
668
+ declare void @blowup () noreturn
669
+ define void @live_with_dead_entry () personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8* ) {
670
+ ; CHECK: define void @live_with_dead_entry(
671
+ ; CHECK-NEXT: entry:
672
+ ; CHECK-NEXT: invoke void @blowup()
673
+ ; CHECK-NEXT: to label %live_with_dead_entry.dead unwind label %lpad
674
+ ; CHECK: lpad: ; preds = %entry
675
+ ; CHECK-NEXT: %0 = landingpad { i8*, i32 }
676
+ ; CHECK-NEXT: catch i8* null
677
+ ; CHECK-NEXT: br label %live_with_dead_entry
678
+ ; CHECK: live_with_dead_entry.dead: ; preds = %entry
679
+ ; CHECK-NEXT: unreachable
680
+ ; CHECK: live_with_dead_entry: ; preds = %lpad
681
+ ; CHECK-NEXT: ret void
682
+ entry:
683
+ invoke void @blowup () to label %live_with_dead_entry unwind label %lpad
684
+ lpad:
685
+ %0 = landingpad { i8* , i32 } catch i8* null
686
+ br label %live_with_dead_entry
687
+ live_with_dead_entry:
688
+ ret void
689
+ }
690
+
691
+ define void @live_with_dead_entry_lp () personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8* ) {
692
+ ; CHECK: define void @live_with_dead_entry_lp(
693
+ ; CHECK-NEXT: entry:
694
+ ; CHECK-NEXT: invoke void @blowup()
695
+ ; CHECK-NEXT: to label %live_with_dead_entry.dead unwind label %lp1
696
+ ; CHECK: lp1: ; preds = %entry
697
+ ; CHECK-NEXT: %lp = landingpad { i8*, i32 }
698
+ ; CHECK-NEXT: catch i8* null
699
+ ; CHECK-NEXT: invoke void @blowup()
700
+ ; CHECK-NEXT: to label %live_with_dead_entry.dead1 unwind label %lp2
701
+ ; CHECK: lp2: ; preds = %lp1
702
+ ; CHECK-NEXT: %0 = landingpad { i8*, i32 }
703
+ ; CHECK-NEXT: catch i8* null
704
+ ; CHECK-NEXT: br label %live_with_dead_entry
705
+ ; CHECK: live_with_dead_entry.dead: ; preds = %entry
706
+ ; CHECK-NEXT: unreachable
707
+ ; CHECK: live_with_dead_entry.dead1: ; preds = %lp1
708
+ ; CHECK-NEXT: unreachable
709
+ ; CHECK: live_with_dead_entry: ; preds = %lp2
710
+ ; CHECK-NEXT: ret void
711
+ entry:
712
+ invoke void @blowup () to label %live_with_dead_entry unwind label %lp1
713
+ lp1:
714
+ %lp = landingpad { i8* , i32 } catch i8* null
715
+ invoke void @blowup () to label %live_with_dead_entry unwind label %lp2
716
+ lp2:
717
+ %0 = landingpad { i8* , i32 } catch i8* null
718
+ br label %live_with_dead_entry
719
+ live_with_dead_entry:
720
+ ret void
721
+ }
0 commit comments