| ; RUN: opt -passes=function-attrs -S < %s |
| |
| ; Regression test for a null-returning bug of getUnderlyingObjectAggressive(). |
| ; This should not crash. |
| define void @phi_cycle() { |
| bb: |
| unreachable |
| |
| bb1: ; preds = %bb17 |
| br label %bb2 |
| |
| bb2: ; preds = %bb5, %bb1 |
| %phi = phi ptr [ %phi6, %bb1 ], [ %phi6, %bb5 ] |
| br i1 poison, label %bb4, label %bb3 |
| |
| bb3: ; preds = %bb2 |
| %getelementptr = getelementptr inbounds i8, ptr %phi, i32 poison |
| br label %bb5 |
| |
| bb4: ; preds = %bb2 |
| br label %bb7 |
| |
| bb5: ; preds = %bb15, %bb3 |
| %phi6 = phi ptr [ %getelementptr, %bb3 ], [ %phi16, %bb15 ] |
| br i1 poison, label %bb17, label %bb2 |
| |
| bb7: ; preds = %bb15, %bb4 |
| %phi8 = phi ptr [ %phi, %bb4 ], [ %phi16, %bb15 ] |
| br i1 poison, label %bb11, label %bb9 |
| |
| bb9: ; preds = %bb7 |
| %getelementptr10 = getelementptr inbounds i8, ptr %phi8, i32 1 |
| store i8 poison, ptr %phi8, align 1 |
| br label %bb15 |
| |
| bb11: ; preds = %bb7 |
| br i1 poison, label %bb13, label %bb12 |
| |
| bb12: ; preds = %bb11 |
| br label %bb13 |
| |
| bb13: ; preds = %bb12, %bb11 |
| %getelementptr14 = getelementptr inbounds i8, ptr %phi8, i32 poison |
| br label %bb15 |
| |
| bb15: ; preds = %bb13, %bb9 |
| %phi16 = phi ptr [ %getelementptr14, %bb13 ], [ %getelementptr10, %bb9 ] |
| br i1 poison, label %bb5, label %bb7 |
| |
| bb17: ; preds = %bb5 |
| br label %bb1 |
| } |