[llvm] [DebugInfo] Add DW_TAG_property support to LLVM DebugInfo (PR #215776)
Piotr Jeremicz via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 26 06:26:17 PDT 2026
================
@@ -4609,6 +4610,88 @@ class DIObjCProperty : public DINode {
}
};
+/// A property of a class or structure.
+///
+/// Represents a DWARF \c DW_TAG_property: an entity that is syntactically
+/// accessed like a data member, but whose access is implemented by invoking a
+/// user-defined or compiler-generated accessor.
+///
+/// Currently only the backing storage is modelled, and it must be a data
+/// member holding the property's storage.
+class DIProperty : public DINode {
+ friend class LLVMContextImpl;
+ friend class MDNode;
+
+ unsigned Line;
+
+ DIProperty(LLVMContext &C, StorageType Storage, unsigned Line,
+ ArrayRef<Metadata *> Ops);
+ ~DIProperty() = default;
+
+ static DIProperty *getImpl(LLVMContext &Context, StringRef Name,
+ DIFile *File, unsigned Line, DIType *Type,
+ DINode *BackingStorage, StorageType Storage,
+ bool ShouldCreate = true) {
+ return getImpl(Context, getCanonicalMDString(Context, Name), File, Line,
+ Type, BackingStorage, Storage, ShouldCreate);
+ }
+ LLVM_ABI static DIProperty *getImpl(LLVMContext &Context, MDString *Name,
+ Metadata *File, unsigned Line,
+ Metadata *Type, Metadata *BackingStorage,
+ StorageType Storage,
+ bool ShouldCreate = true);
+
+ TempDIProperty cloneImpl() const {
+ return getTemporary(getContext(), getName(), getFile(), getLine(),
+ getType(), getBackingStorage());
+ }
+
+public:
+ DEFINE_MDNODE_GET(DIProperty,
+ (StringRef Name, DIFile *File, unsigned Line, DIType *Type,
+ DINode *BackingStorage),
+ (Name, File, Line, Type, BackingStorage))
+ DEFINE_MDNODE_GET(DIProperty,
+ (MDString * Name, Metadata *File, unsigned Line,
+ Metadata *Type, Metadata *BackingStorage),
+ (Name, File, Line, Type, BackingStorage))
+
+ TempDIProperty clone() const { return cloneImpl(); }
+
+ unsigned getLine() const { return Line; }
+ StringRef getName() const { return getStringOperand(0); }
+ DIFile *getFile() const { return cast_or_null<DIFile>(getRawFile()); }
+ DIType *getType() const { return cast_or_null<DIType>(getRawType()); }
+
+ /// The data member holding the property's backing storage, i.e. the target
+ /// of \c DW_AT_property_forward on this property's
----------------
piotrekjeremicz wrote:
Done 😊
https://github.com/llvm/llvm-project/pull/215776
More information about the llvm-commits
mailing list