[cfe-dev] Fixing MemberPointerTypeLoc.

Enea Zaffanella zaffanella at cs.unipr.it
Fri Mar 4 02:24:49 PST 2011


Hello.

We would like to get rid of the FIXME in MemberPointerTypeLoc so as to
provide appropriate NNSLoc info. As an example of the current problem,
code such as the following:

int S<int[2+3]>::* ptr = 0;

gets printed as follows (note that the array size is computed):

int S<int [5]>::*ptr = 0;

The situation seems to be much like that of ElaboratedTypeLoc, except
for the fact that in ElaboratedType we do have an NestedNameSpecifier,
while in MemberPointerType we have instead

  /// The class of which the pointee is a member. Must ultimately be a
  /// RecordType, but could be a typedef or a template parameter too.
  const Type *Class;


So, what would be the best way to proceed?

Can we _add_ a NNS* to MemberPointerType?

Should we _replace_ the Type* with the NNS* and have the method
getClass() recompute the class type on the fly?

Should we add a TypeSourceInfo* (rather than an NNSLoc) for the class
type to the MemberPointerTypeLoc ?


Enea.



More information about the cfe-dev mailing list