rjmccall added inline comments.

================
Comment at: include/clang/AST/DeclCXX.h:2189
+    C.addCVRUQualifiers(CVRU);
+    C.addQualifiers(getType().getQualifiers());
+    return C;
----------------
The address-space qualifier should get stored in the same way on the 
`FunctionProtoType` as the other method qualifiers (at least as far as the 
public interface of FPT goes).  It's not the same thing as an ordinary type 
qualifier on the type, and trying to represent it that way will lead to a lot 
of problems downstream.

You'll probably also have to do some extra work in SemaType to make sure that 
the attribute gets applied in the right place.

You'll need to mess around with the representation of FPT to make this 
efficient, because we don't want to make every instance of FPT have to pay to 
store a full `Qualifiers`.  I'd do it like this:
- Go ahead and add a full `Qualifiers` in `FunctionProtoType::ExtProtoInfo`; 
this is never stored permanently, so the cost is negligible.
- There are currently four bits for "qualifiers" in `FunctionTypeBits`.  The 
only qualifiers that are actually important to store inline like this are 
`const` and `volatile`, but since we have four bits, let's store CVR here and 
use the fourth bit to indicate that there are more qualifiers stored in 
trailing storage.
- When there are non-CVR qualifiers present, 
`ASTContext::getFunctionTypeInternal` should allocate additional trailing 
storage for a `Qualifiers` object that can store the rest of the qualifiers.
- `getTypeQuals()` can check for the bit and load the qualifiers if present, or 
else just return the CVR qualifiers stored inline.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D54862/new/

https://reviews.llvm.org/D54862



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to