Have the DbgVariable "isArtificial" and "isObjectPointer" not
authorEric Christopher <echristo@apple.com>
Fri, 21 Sep 2012 22:18:52 +0000 (22:18 +0000)
committerEric Christopher <echristo@apple.com>
Fri, 21 Sep 2012 22:18:52 +0000 (22:18 +0000)
care about it being an argument variable so that we can decide
that captured block and lambda vars that don't happen to
be arguments could be an argument pointer.

Add the object pointer for one case onto the subprogram die.

rdar://12001329

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

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfDebug.h

index 52fae53fe84c630e75e69b4f82341c4796cca4ce..52b10d7ca6824f793168edeefeaa520fc99eb146 100644 (file)
@@ -515,8 +515,10 @@ DIE *DwarfDebug::constructScopeDIE(CompileUnit *TheCU, LexicalScope *Scope) {
   const SmallVector<DbgVariable *, 8> &Variables = ScopeVariables.lookup(Scope);
   for (unsigned i = 0, N = Variables.size(); i < N; ++i)
     if (DIE *Variable = 
-        TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope()))
+        TheCU->constructVariableDIE(Variables[i], Scope->isAbstractScope())) {
       Children.push_back(Variable);
+      if (Variables[i]->isObjectPointer()) ObjectPointer = Variable;
+    }
   const SmallVector<LexicalScope *, 4> &Scopes = Scope->getChildren();
   for (unsigned j = 0, M = Scopes.size(); j < M; ++j)
     if (DIE *Nested = constructScopeDIE(TheCU, Scopes[j]))
index d5ae4687df57b0249c61b3d427307a4f85d88732..20e232dfc8555e6055a471db9b10c62798f6c803 100644 (file)
@@ -159,8 +159,7 @@ public:
   bool isArtificial()                const {
     if (Var.isArtificial())
       return true;
-    if (Var.getTag() == dwarf::DW_TAG_arg_variable
-        && getType().isArtificial())
+    if (getType().isArtificial())
       return true;
     return false;
   }
@@ -168,8 +167,7 @@ public:
   bool isObjectPointer()             const {
     if (Var.isObjectPointer())
       return true;
-    if (Var.getTag() == dwarf::DW_TAG_arg_variable
-        && getType().isObjectPointer())
+    if (getType().isObjectPointer())
       return true;
     return false;
   }