]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - opencl/llvm.git/commitdiff
DebugInfo: Fix inlining with #file directives a little harder
authorDavid Blaikie <dblaikie@gmail.com>
Sun, 25 May 2014 18:11:35 +0000 (18:11 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Sun, 25 May 2014 18:11:35 +0000 (18:11 +0000)
Seems my previous fix was insufficient - we were still not adding the
inlined function to the abstract scope list. Which meant it wasn't
flagged as inline, didn't have nested lexical scopes in the abstract
definition, and didn't have abstract variables - so the inlined variable
didn't reference an abstract variable, instead being described
completely inline.

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

lib/CodeGen/LexicalScopes.cpp
test/DebugInfo/inline-scopes.ll

index d965968fb498bbaa906e3b8a3d7d3307c4b4da80..d12c234bf3b20343eea3d8b7dc740dc476eb7485 100644 (file)
@@ -210,21 +210,21 @@ LexicalScope *LexicalScopes::getOrCreateAbstractScope(const MDNode *N) {
   DIDescriptor Scope(N);
   if (Scope.isLexicalBlockFile())
     Scope = DILexicalBlockFile(Scope).getScope();
-  auto I = AbstractScopeMap.find(N);
+  auto I = AbstractScopeMap.find(Scope);
   if (I != AbstractScopeMap.end())
     return &I->second;
 
   LexicalScope *Parent = nullptr;
   if (Scope.isLexicalBlock()) {
-    DILexicalBlock DB(N);
+    DILexicalBlock DB(Scope);
     DIDescriptor ParentDesc = DB.getContext();
     Parent = getOrCreateAbstractScope(ParentDesc);
   }
   I = AbstractScopeMap.emplace(std::piecewise_construct,
-                               std::forward_as_tuple(N),
-                               std::forward_as_tuple(Parent, DIDescriptor(N),
+                               std::forward_as_tuple(Scope),
+                               std::forward_as_tuple(Parent, Scope,
                                                      nullptr, true)).first;
-  if (DIDescriptor(N).isSubprogram())
+  if (Scope.isSubprogram())
     AbstractScopesList.push_back(&I->second);
   return &I->second;
 }
index 310b0404f8762a2108c8140967c82b426b1de93d..36c073516c56a5ac7c8a1031e68ea6eeead087f7 100644 (file)
@@ -32,6 +32,9 @@
 ; Ensure that file changes don't interfere with creating inlined subroutines.
 ; (see the line directive inside 'f2' in thesource)
 ; CHECK: DW_TAG_inlined_subroutine
+; CHECK:   DW_TAG_variable
+; CHECK-NOT: DW_TAG
+; CHECK:     DW_AT_abstract_origin
 
 ; Function Attrs: uwtable
 define i32 @main() #0 {