[cfe-dev] Template parameters of friend declarations.

Enea Zaffanella zaffanella at cs.unipr.it
Mon Jan 21 00:42:35 PST 2013


Hello.

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?

Enea



More information about the cfe-dev mailing list