[cfe-commits] r58100 - in /cfe/trunk: lib/Sema/SemaDecl.cpp test/SemaCXX/fntype-decl.cpp

Ted Kremenek kremenek at apple.com
Mon Oct 27 07:34:03 PDT 2008


On Oct 27, 2008, at 6:40 AM, Doug Gregor wrote:

> I don't think the ownership policy would necessarily clear this up.
> For ownership to solve this problem, we would need to have the
> FunctionDecl "own" the TypedefDecl that is used to express it's type.

Thanks for the clarification.  I'm not certain if you saw the  
discussion a month or so ago about DeclGroups and TypeSpecifiers,  
which would hopefully resolve many (most?) of these kind of ownership  
issues in the ASTs.

> It can't have sole ownership, of course, since another FunctionDecl
> might use it as the type.

There is a difference between the ownership of the decl and referring  
to a type.

DeclGroups/TypeSpecifiers are intended to enforce the following:

(a) Types don't own Decls (the biggest chunk missing)
(b) Decls don't own Types (already in place; ASTContext owns Types)

> There are a few solutions here. One easy option, which I've committed
> already as a band-aid, is as Argiris said: destroy the decls in
> reverse order. Since a Decl should only depend on Decls before it,
> this works.

Make sense.

> Another alternative is to ban destructors that look
> through any non-owned pointer;

That's the solution I imagined all along, and makes the most amount of  
sense when you consider clients of the ASTs that may modify them in  
place (and arbitrarily delete and create nodes).

> for example, this would mean that
> FunctionDecl would have to have its own NumParams field rather than
> looking through its type field to find the number of parameters. Then,
> order of destruction would never matter.

  Since Decls shouldn't own Types, this particular example shouldn't  
actually be an issue.  Are you seeing this to be a problem?  Clearly  
this means that Types should be destroyed after Decls are, but Types  
are released when ASTContext is destroyed (which in TranslationUnit,  
occurs after the Decls are released).



More information about the cfe-commits mailing list