[cfe-dev] Decls are not synonyms for the symbols they represent

Ted Kremenek kremenek at apple.com
Wed Sep 17 14:11:23 PDT 2008


On Sep 17, 2008, at 1:06 PM, Nico Weber wrote:

> Hi,
>
> On 17.09.2008, at 21:52, Ted Kremenek wrote:
>
>>> For this example, I'd like to know why/when we care if all these
>>> VarDecls refer to the same variable? Since each VarDecl is "extern",
>>> it's the linkers job to bind the actual variable definition (which
>>> isn't in this particular translation unit).
>>
>> Another example would be a client that wanted to rename 'x'.  How
>> would it know all of the declarations for the same variable?  There
>> are lots of cases where clients, looking the AST for a translation
>> unit, want to know which declarations refer to the same thing.
>
> How would that client work? As far as I understand, each translation  
> unit has its own AST, so this client needs some kind of linker that  
> merges information from several ASTs. For example:
>
> a.c:
> int a = 4;
> /* use a somewhere below in file*/
>
> b.c:
> extern int a;
> /* use a somewhere below file */
>
> c.c:
> extern int a;
> /* use a somewhere below in file*/
>
> If the tool should rename `a` to `importantCache` (or whatever), it  
> has to know which of a.c, b.c, and c.c belong to the same project  
> and only rename the `a`s in there. More information in a single  
> translation unit doesn't help here, some kind of linker is required.

To rename across files we would need a higher-level API that can  
provide an entire "image" of the entire program/library.  That would  
require some kind of symbol lookup.  As a prerequisite, it seems to me  
that we would need the facilities to be able to do this within a  
single translation unit.



More information about the cfe-dev mailing list