1; RUN: opt -passes=function-attrs -S < %s 2 3; Regression test for a null-returning bug of getUnderlyingObjectAggressive(). 4; This should not crash. 5define void @phi_cycle() { 6bb: 7 unreachable 8 9bb1: ; preds = %bb17 10 br label %bb2 11 12bb2: ; preds = %bb5, %bb1 13 %phi = phi ptr [ %phi6, %bb1 ], [ %phi6, %bb5 ] 14 br i1 poison, label %bb4, label %bb3 15 16bb3: ; preds = %bb2 17 %getelementptr = getelementptr inbounds i8, ptr %phi, i32 poison 18 br label %bb5 19 20bb4: ; preds = %bb2 21 br label %bb7 22 23bb5: ; preds = %bb15, %bb3 24 %phi6 = phi ptr [ %getelementptr, %bb3 ], [ %phi16, %bb15 ] 25 br i1 poison, label %bb17, label %bb2 26 27bb7: ; preds = %bb15, %bb4 28 %phi8 = phi ptr [ %phi, %bb4 ], [ %phi16, %bb15 ] 29 br i1 poison, label %bb11, label %bb9 30 31bb9: ; preds = %bb7 32 %getelementptr10 = getelementptr inbounds i8, ptr %phi8, i32 1 33 store i8 poison, ptr %phi8, align 1 34 br label %bb15 35 36bb11: ; preds = %bb7 37 br i1 poison, label %bb13, label %bb12 38 39bb12: ; preds = %bb11 40 br label %bb13 41 42bb13: ; preds = %bb12, %bb11 43 %getelementptr14 = getelementptr inbounds i8, ptr %phi8, i32 poison 44 br label %bb15 45 46bb15: ; preds = %bb13, %bb9 47 %phi16 = phi ptr [ %getelementptr14, %bb13 ], [ %getelementptr10, %bb9 ] 48 br i1 poison, label %bb5, label %bb7 49 50bb17: ; preds = %bb5 51 br label %bb1 52} 53