[cfe-dev] Decls are not synonyms for the symbols they represent
Ted Kremenek
kremenek at apple.com
Wed Sep 17 12:46:23 PDT 2008
On Sep 17, 2008, at 12:19 PM, steve naroff wrote:
> I guess we could, however I'm still not sure it's the right thing to
> do (since it goes against our tenet of keeping the AST simple and
> reflective of the source). From the compiler's perspective, the 3
> DeclRefExprs *should* bind to 3 different VarDecls.
I agree with Steve here. The three separate declarations really are
separate declarations that should be represented explicitly in the AST.
> 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).
This is somewhat of a bad example; it was mainly to illustrate a
point. However, there are cases for this example where clients do
care that they refer to the same variable. For example, the static
analyzer, when analyzing these functions, may wish to know that these
three declarations represent the same global variable. Where that
variable is actually instantiated is irrelevant; the linker just takes
care of making sure their is storage slotted for that variable in some
translation unit. In other words,
we know that there is a global variable 'x' whose storage lies in some
other translation unit; if the program were to link and run, it will
be an actual variable in memory, so it doesn't really matter where it
was defined.
> The "meta issue" here is how we preserve aspects of Sema's knowledge
> without bloating/contorting the AST's. Like everything else we've
> been doing with clang, it needs to be driven by actual clients. As
> clang clients evolve, we need to consider API's that enable our
> AST's to be used conveniently. Asking clients to re-implement
> complex Sema merging/checking/etc. isn't practical. Note that
> ImplicitCastExpr was added to make the code generators life more
> convenient - without it, the code generator would have to be in the
> type conversion business (which Chris/I wanted to avoid, given C's
> arcane rules). So, changes to the AST's are certainly not out of the
> question...we just need to be clear on the cost/benefit.
My thoughts exactly. It would be great if some of this information
could be stored in external data structures; clients who wish to keep
that information could do so, and otherwise it could get thrown away
once Sema is done with it.
More information about the cfe-dev
mailing list