Let Objective-C front-end identify class extension, in dwarf output, using an attribu...
authorDevang Patel <dpatel@apple.com>
Thu, 12 May 2011 19:06:16 +0000 (19:06 +0000)
committerDevang Patel <dpatel@apple.com>
Thu, 12 May 2011 19:06:16 +0000 (19:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131238 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/DebugInfo.h
include/llvm/Support/Dwarf.h
lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
lib/Support/Dwarf.cpp

index c6cc8f7665edaeb53d95eda9217276781d5b53fe..a01b5a3a86bcf57d00339d005b774de9a77710d8 100644 (file)
@@ -49,15 +49,16 @@ namespace llvm {
   class DIDescriptor {
   public:
     enum {
-      FlagPrivate          = 1 << 0,
-      FlagProtected        = 1 << 1,
-      FlagFwdDecl          = 1 << 2,
-      FlagAppleBlock       = 1 << 3,
-      FlagBlockByrefStruct = 1 << 4,
-      FlagVirtual          = 1 << 5,
-      FlagArtificial       = 1 << 6,
-      FlagExplicit         = 1 << 7,
-      FlagPrototyped       = 1 << 8
+      FlagPrivate            = 1 << 0,
+      FlagProtected          = 1 << 1,
+      FlagFwdDecl            = 1 << 2,
+      FlagAppleBlock         = 1 << 3,
+      FlagBlockByrefStruct   = 1 << 4,
+      FlagVirtual            = 1 << 5,
+      FlagArtificial         = 1 << 6,
+      FlagExplicit           = 1 << 7,
+      FlagPrototyped         = 1 << 8,
+      FlagObjcClassExtension = 1 << 9
     };
   protected:
     const MDNode *DbgNode;
@@ -271,6 +272,9 @@ namespace llvm {
     bool isArtificial() const {
       return (getFlags() & FlagArtificial) != 0;
     }
+    bool isObjcClassExtension() const {
+      return (getFlags() & FlagObjcClassExtension) != 0;
+    }
     bool isValid() const {
       return DbgNode && (isBasicType() || isDerivedType() || isCompositeType());
     }
index f6d680b8b9d8a1895625aa2498d4759c503be1c7..7fecf6f5f0f4abf26da16d8342eb4531c1dd0146 100644 (file)
@@ -235,6 +235,7 @@ enum dwarf_constants {
   DW_AT_APPLE_property_getter = 0x3fe9,
   DW_AT_APPLE_property_setter = 0x3fea,
   DW_AT_APPLE_property_attribute = 0x3feb,
+  DW_AT_APPLE_objc_class_extension = 0x3fec,
 
   // Attribute form encodings
   DW_FORM_addr = 0x01,
index 98af7a41e7f8925f398c6c6cdd2b5aaaaa891abe..4eb40947752e67f97b1513df20508f734e909692 100644 (file)
@@ -766,6 +766,10 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
       addToContextOwner(&Buffer, Context);
     }
 
+    if (CTy.isObjcClassExtension())
+      addUInt(&Buffer, dwarf::DW_AT_APPLE_objc_class_extension,
+              dwarf::DW_FORM_flag, 1);
+
     if (Tag == dwarf::DW_TAG_class_type) 
       addTemplateParams(Buffer, CTy.getTemplateParams());
 
index 74a9fda7ab649998bf5a299a9b7904a52f357a0c..cbf8aad5f22df4f93255394a6762cef788665faf 100644 (file)
@@ -207,6 +207,7 @@ const char *llvm::dwarf::AttributeString(unsigned Attribute) {
   case DW_AT_APPLE_property_getter:      return "DW_AT_APPLE_property_getter";
   case DW_AT_APPLE_property_setter:      return "DW_AT_APPLE_property_setter";
   case DW_AT_APPLE_property_attribute:   return "DW_AT_APPLE_property_attribute";
+  case DW_AT_APPLE_objc_class_extension: return "DW_AT_APPLE_objc_class_extension";
   }
   return 0;
 }