OSDN Git Service

Add isClosure() predicate. This is used to add DW_AT_APPLE_block attribute.
authorDevang Patel <dpatel@apple.com>
Wed, 26 Aug 2009 00:39:50 +0000 (00:39 +0000)
committerDevang Patel <dpatel@apple.com>
Wed, 26 Aug 2009 00:39:50 +0000 (00:39 +0000)
Patch by Caroline Tice.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80061 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/DebugInfo.h
lib/CodeGen/AsmPrinter/DwarfDebug.cpp

index 4f86f50..aabddb0 100644 (file)
@@ -173,7 +173,8 @@ namespace llvm {
     enum {
       FlagPrivate   = 1 << 0,
       FlagProtected = 1 << 1,
-      FlagFwdDecl   = 1 << 2
+      FlagFwdDecl   = 1 << 2,
+      FlagClosure   = 1 << 3
     };
 
   protected:
@@ -226,6 +227,9 @@ namespace llvm {
     bool isForwardDecl() const          {
         return (getFlags() & FlagFwdDecl) != 0; 
     }
+    bool isClosure() const          {
+        return (getFlags() & FlagClosure) != 0; 
+    }
 
     /// dump - print type.
     void dump() const;
index 067db8b..e053597 100644 (file)
@@ -695,10 +695,7 @@ void DwarfDebug::ConstructTypeDIE(CompileUnit *DW_Unit, DIE &Buffer,
       Buffer.AddChild(ElemDie);
     }
 
-    // FIXME: We'd like an API to register additional attributes for the
-    // frontend to use while synthesizing, and then we'd use that api in clang
-    // instead of this.
-    if (Name == "__block_literal_generic")
+    if (CTy.isClosure())
       AddUInt(&Buffer, dwarf::DW_AT_APPLE_block, dwarf::DW_FORM_flag, 1);
 
     unsigned RLang = CTy.getRunTimeLang();