[cfe-commits] r41258 - in /cfe/trunk: AST/CFG.cpp include/clang/AST/CFG.h

Ted Kremenek kremenek at apple.com
Wed Aug 22 08:36:12 PDT 2007


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.



More information about the cfe-commits mailing list