[cfe-dev] Template parameters of friend declarations.

John McCall rjmccall at apple.com
Tue Jan 22 11:34:46 PST 2013


On Jan 21, 2013, at 12:42 AM, Enea Zaffanella <zaffanella at cs.unipr.it> wrote:
> In clang AST, we currently have two nodes representing friend declarations, namely FriendDecl and FriendTemplateDecl. The documentation for the second class says that it is currently unused:
> 
> /// \note This class is not currently in use.  All of the above
> /// will yield a FriendDecl, not a FriendTemplateDecl.
> 
> Hence, all friend declarations having template parameter lists end up building a FriendDecl node. Currently, these FriendDecl nodes have no way to store the (optional) template parameter lists.
> 
> For source-code fidelity purposes *only*, would it be OK if FriendDecl is changed so as to also store this missing info?
> 
> Currently, the FriendDecl node uses a pointer union:
> 
>  typedef llvm::PointerUnion<NamedDecl*,TypeSourceInfo*> FriendUnion;
> 
> A possibility would be to add an ExtInfo inner class (similar to what was done for DeclaratorDecl) and then change the union above to become:
> 
>  typedef llvm::PointerUnion3<NamedDecl*,TypeSourceInfo*,ExtInfo*> FriendUnion;
> 
> This way, we would incur a memory space penalty only when there actually are template parameter lists. Are you willing to accept patches following this approach?

Are the template parameter lists not attached to the target declaration?

John.



More information about the cfe-dev mailing list