[cfe-commits] r41258 - in /cfe/trunk: AST/CFG.cpp include/clang/AST/CFG.h
Ted Kremenek
kremenek at apple.com
Wed Aug 22 09:58:31 PDT 2007
On Aug 22, 2007, at 9:34 AM, Chris Lattner wrote:
>
> On Aug 22, 2007, at 8:36 AM, Ted Kremenek wrote:
>
>>
>> On Aug 21, 2007, at 10:43 PM, Chris Lattner wrote:
>>
>>>>
>>>> + // Backpatch the gotos whose label -> block mappings we
>>>> didn't know
>>>> + // when we encountered them.
>>>> + for (BackpatchBlocksTy::iterator I =
>>>> BackpatchBlocks.begin(),
>>>> + E = BackpatchBlocks.end(); I != E; ++I ) {
>>>> +
>>>> + CFGBlock* B = *I;
>>>> + GotoStmt* G = cast<GotoStmt>(B->getTerminator());
>>>> + LabelMapTy::iterator LI = LabelMap.find(G->getLabel());
>>>> +
>>>> + if (LI == LabelMap.end())
>>>> + return NULL; // No matching label. Bad CFG.
>>>
>>> This should be an assert. The CFG should only be built for valid
>>> ASTs.
>>
>> The current design thought was to allow the construction of CFGs
>> for arbitrary subtrees of valid ASTs (that represent a function
>> body).
>>
>> However, a subtree of an AST may contain gotos that reference
>> labels in other subtrees of the AST (and thus the subtree is
>> "invalid" from the perspective of constructing a CFG). If we allow
>> CFGs to be constructed from arbitrary subtrees of valid ASTs, then
>> I don't see how this cannot be a run-time check.
>
> Interesting point. In that case, instead of 'return NULL' you
> should have 'continue'.
>
> -Chris
This will result in CFGs where there will be blocks with gotos that do
not have any successors. Is this the desired behavior? Should we
return a flag or something indicating that the control-flow in the CFG
is "not complete?"
More information about the cfe-commits
mailing list