<div dir="ltr"><div>Here is some IR that is working and executing as expected -- All allocas are in the first basic block, and only updates happen in other basic blocks.</div><div><br></div><div>define i32 @f() {<br></div><div>entry:</div><div>  %x = alloca i32</div><div>  store i32 333, i32* %x</div><div>  %i = alloca i32</div><div>  store i32 11, i32* %i</div><div>  br i1 true, label %if.then, label %if.else</div><div><br></div><div>if.then:                                          ; preds = %entry</div><div>  store i32 3, i32* %i</div><div>  %0 = load i32* %i</div><div>  ret i32 %0</div><div><br></div><div>if.else:                                          ; preds = %entry</div><div>  ret i32 2</div><div><br></div><div>if.end:                                           ; preds = %after_ret1, %after_</div><div>ret</div><div>  ret i32 1</div><div><br></div><div>after_ret:                                        ; No predecessors!</div><div>  br label %if.end</div><div><br></div><div>after_ret1:                                       ; No predecessors!</div><div>  br label %if.end</div><div><br></div><div>after_ret2:                                       ; No predecessors!</div><div>  ret i32 0</div><div>}</div><div><br></div><div>The following IR is slightly different in that the alloca is defined not in the first basic block:</div><div><br></div><div><div>define i32 @M() {</div><div>entry:</div><div>  %x = alloca i32</div><div>  store i32 333, i32* %x</div><div>  br i1 true, label %if.then, label %if.else</div><div><br></div><div>if.then:                                          ; preds = %entry</div><div>  %i = alloca i32</div><div>  store i32 3, i32* %i</div><div>  %0 = load i32* %i</div><div>  ret i32 %0</div><div><br></div><div>if.else:                                          ; preds = %entry</div><div>  ret i32 2</div><div><br></div><div>if.end:                                           ; preds = %after_ret1, %after_</div><div>ret</div><div>  ret i32 1</div><div><br></div><div>after_ret:                                        ; No predecessors!</div><div>  br label %if.end</div><div><br></div><div>after_ret1:                                       ; No predecessors!</div><div>  br label %if.end</div><div><br></div><div>after_ret2:                                       ; No predecessors!</div><div>  ret i32 0</div><div>}</div></div><div><br></div><div>This segfaults for me. The IR passes the function verifier. Can someone spot an error? I don't see any.</div></div>