================
@@ -3547,6 +3546,46 @@ class CountAttributedType final
StringRef getAttributeName(bool WithMacroPrefix) const;
};
+/// Represents a placeholder type for late-parsed type attributes.
+/// This type wraps another type and holds an opaque pointer to a
+/// LateParsedAttribute that will be parsed later (e.g., in ActOnFields).
+/// Once parsed, this type is replaced with the appropriate attributed type
+/// (e.g., CountAttributedType for counted_by).
+class LateParsedAttrType : public Type, public llvm::FoldingSetNode {
+ friend class ASTContext; // ASTContext creates these.
+
+ QualType WrappedTy;
+ LateParsedTypeAttribute *LateParsedTypeAttr;
+
+ LateParsedAttrType(QualType Wrapped, QualType Canon,
+ LateParsedTypeAttribute *Attr)
+ : Type(LateParsedAttr, Canon, Wrapped->getDependence()),
+ WrappedTy(Wrapped), LateParsedTypeAttr(Attr) {}
+
+public:
+ QualType getWrappedType() const { return WrappedTy; }
+ LateParsedTypeAttribute *getLateParsedAttribute() const {
+ return LateParsedTypeAttr;
+ }
+
+ bool isSugared() const { return true; }
+ QualType desugar() const { return WrappedTy; }
+
+ void Profile(llvm::FoldingSetNodeID &ID) {
+ Profile(ID, WrappedTy, LateParsedTypeAttr);
+ }
+
+ static void Profile(llvm::FoldingSetNodeID &ID, QualType Wrapped,
+ LateParsedTypeAttribute *Attr) {
+ ID.AddPointer(Wrapped.getAsOpaquePtr());
----------------
delcypher wrote:
Is using `Wrapped.getAsOpaquePtr()` the right thing to do here? Right now it
seems we only consider a `LateParsedAttrType` to be equal if the pointers to
the wrapped type and the `LateParsedTypeAttr` are the same.
If the QualType has it's own `Profile` method I'd be tempted to use it.
https://github.com/llvm/llvm-project/pull/204125
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits