[llvm-commits] [PATCH] SuccIterator on bbs without terminator insts

Chris Lattner clattner at apple.com
Mon Jul 4 14:48:52 PDT 2011


On Jul 3, 2011, at 10:26 PM, Tobias Grosser wrote:
>> Intuitively no, because all basic blocks are required to have
>> terminators. But I suspect you ran into this for a reason, and tools
>> like succ_begin/end() may not be able to assume that the CFG is valid at
>> any point in time because the IR is being modified. Could you explain
>> more about what you were doing which triggered this?
> 
> It's pretty easy.
> 
> In Polly we modify the CFG by adding some additional basic blocks 
> (actually a branch that contains an optimized code path). Once in a 
> while (because of a bug in Polly or somewhere in LLVM) I have a failing 
> test case. My first step to investigate a bug is to put a breakpoint at 
> the place in the code where I suspect the bug (or an assert triggered). 
> My next step is to call F->viewCFG() to see the current state of the 
> CFG. Unfortunately this almost never works, as the CFG is at this point 
> not yet fully constructed and consequently the above assert triggers.
> 
> In general I believe for debugging it would be very helpful if 
> F->viewCFG() would already work during the construction of the CFG.

I agree with Nick that this is really counterintuitive, but your logic makes sense to me.  Please commit with a comment explaining that getTerminator() is allowed to return null for malformed CFGs.

-Chris



More information about the llvm-commits mailing list