[cfe-dev] Should we build semantically invalid nodes?

Chris Lattner clattner at apple.com
Sun Oct 26 11:31:47 PDT 2008


On Oct 26, 2008, at 11:15 AM, Sebastian Redl wrote:

> Argiris Kirtzidis wrote:
>> Chris Lattner wrote:
>>
>>> It seems to me that it comes down to the clients that are the  
>>> ultimate  consumers of this information.  Since Sema is perfectly  
>>> fine for  correct code, lets ignore all clients that require well- 
>>> formed code  (e.g. codegen, refactoring, etc)
>>>
>>
>> Refactoring, as I see it, doesn't require well-formed code, e.g.  
>> "rename this parameter name" doesn't particularly care about only  
>> the well-formed uses, it just wants to find all the appearances of  
>> the parameter in the function, even if the parameter is used in an  
>> invalid reinterpret_cast.
>>
> Refactoring invalid code is extremely dangerous. If there are errors  
> in the code, then how can the refactory possibly preserve the  
> semantics? The semantics aren't even well-defined. I'm pretty sure  
> the Eclipse Java refactory requires valid code.

Yes, and it depends on just how broken it is.  If the parser skipped a  
bunch of tokens to do error recovery, you aren't guaranteed to have  
all instances of the identifier.

On top of that, refactoring isn't just about renaming things... it has  
to do a lot of verification to make sure that the transformation is  
safe.  For example, in:


int G;
int foo(int H) {
   return G+H;
}

A refactoring tool is supposed to not allow you to rename G to H  
because it would be shadowed (and thus change semantics) in foo.   
Doing these sorts of checks requires the "deep" analysis that requires  
traversing and reasoning about the AST.  If the AST is broken, these  
analyses have to tolerate this, which isn't worth it.

-Chris



More information about the cfe-dev mailing list