<div dir="ltr">Hi Sean, TestRedefinitionsInInline is not passing on Windows.  I'm getting this when trying to reproduce manually:<div><br></div><div><div>(lldb) expression b</div><div>error: reference to 'b' is ambiguous</div><div>candidate found by name lookup is 'b'</div><div>candidate found by name lookup is 'b'</div><div>error: 1 error parsing expression</div></div><div><br></div><div>If you know what the proper fix is, can you fix it?  Otherwise please xfail the test on windows.</div><div><br></div><div>BTW, did you see the email notification come through about the test failure?</div><div><br></div><div><a href="http://lab.llvm.org:8011/builders/lldb-x86-windows-msvc2015/builds/18711">http://lab.llvm.org:8011/builders/lldb-x86-windows-msvc2015/builds/18711</a><br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, May 23, 2016 at 11:37 AM Sean Callanan via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org">lldb-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: spyffe<br>
Date: Mon May 23 13:30:59 2016<br>
New Revision: 270474<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=270474&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=270474&view=rev</a><br>
Log:<br>
Removed the m_decl_objects map from ClangASTContext.<br>
<br>
m_decl_objects is problematic because it assumes that each VarDecl has a unique<br>
variable associated with it.  This is not the case in inline contexts.<br>
<br>
Also the information in this map can be reconstructed very easily without<br>
maintaining the map.  The rest of the testsuite passes with this cange, and I've<br>
added a testcase covering the inline contexts affected by this.<br>
<br>
<rdar://problem/26278502><br>
<br>
Added:<br>
    lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/TestRedefinitionsInInlines.py<br>
    lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/main.c<br>
Modified:<br>
    lldb/trunk/include/lldb/Symbol/ClangASTContext.h<br>
    lldb/trunk/include/lldb/Symbol/CompilerDecl.h<br>
    lldb/trunk/include/lldb/Symbol/GoASTContext.h<br>
    lldb/trunk/include/lldb/Symbol/JavaASTContext.h<br>
    lldb/trunk/include/lldb/Symbol/TypeSystem.h<br>
    lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp<br>
    lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp<br>
    lldb/trunk/source/Symbol/ClangASTContext.cpp<br>
    lldb/trunk/source/Symbol/CompilerDecl.cpp<br>
    lldb/trunk/source/Symbol/JavaASTContext.cpp<br>
    lldb/trunk/source/Symbol/Variable.cpp<br>
<br>
Modified: lldb/trunk/include/lldb/Symbol/ClangASTContext.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/ClangASTContext.h?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Symbol/ClangASTContext.h (original)<br>
+++ lldb/trunk/include/lldb/Symbol/ClangASTContext.h Mon May 23 13:30:59 2016<br>
@@ -557,12 +557,6 @@ public:<br>
     //----------------------------------------------------------------------<br>
     // CompilerDecl override functions<br>
     //----------------------------------------------------------------------<br>
-    lldb::VariableSP<br>
-    DeclGetVariable (void *opaque_decl) override;<br>
-<br>
-    void<br>
-    DeclLinkToObject (void *opaque_decl, std::shared_ptr<void> object) override;<br>
-<br>
     ConstString<br>
     DeclGetName (void *opaque_decl) override;<br>
<br>
@@ -1218,7 +1212,6 @@ protected:<br>
     uint32_t                                        m_pointer_byte_size;<br>
     bool                                            m_ast_owned;<br>
     bool                                            m_can_evaluate_expressions;<br>
-    std::map<void *, std::shared_ptr<void>>         m_decl_objects;<br>
     // clang-format on<br>
 private:<br>
     //------------------------------------------------------------------<br>
<br>
Modified: lldb/trunk/include/lldb/Symbol/CompilerDecl.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompilerDecl.h?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/CompilerDecl.h?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Symbol/CompilerDecl.h (original)<br>
+++ lldb/trunk/include/lldb/Symbol/CompilerDecl.h Mon May 23 13:30:59 2016<br>
@@ -65,12 +65,6 @@ public:<br>
     IsClang () const;<br>
<br>
     //----------------------------------------------------------------------<br>
-    // Object linked to the decl<br>
-    //----------------------------------------------------------------------<br>
-    lldb::VariableSP<br>
-    GetAsVariable ();<br>
-<br>
-    //----------------------------------------------------------------------<br>
     // Accessors<br>
     //----------------------------------------------------------------------<br>
<br>
<br>
Modified: lldb/trunk/include/lldb/Symbol/GoASTContext.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/GoASTContext.h?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/GoASTContext.h?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Symbol/GoASTContext.h (original)<br>
+++ lldb/trunk/include/lldb/Symbol/GoASTContext.h Mon May 23 13:30:59 2016<br>
@@ -85,17 +85,6 @@ class GoASTContext : public TypeSystem<br>
         return ConstString();<br>
     }<br>
<br>
-    lldb::VariableSP<br>
-    DeclGetVariable (void *opaque_decl) override<br>
-    {<br>
-        return lldb::VariableSP();<br>
-    }<br>
-<br>
-    void<br>
-    DeclLinkToObject (void *opaque_decl, std::shared_ptr<void> object) override<br>
-    {<br>
-    }<br>
-<br>
     //----------------------------------------------------------------------<br>
     // CompilerDeclContext functions<br>
     //----------------------------------------------------------------------<br>
<br>
Modified: lldb/trunk/include/lldb/Symbol/JavaASTContext.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/JavaASTContext.h?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/JavaASTContext.h?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Symbol/JavaASTContext.h (original)<br>
+++ lldb/trunk/include/lldb/Symbol/JavaASTContext.h Mon May 23 13:30:59 2016<br>
@@ -70,12 +70,6 @@ public:<br>
     ConstString<br>
     DeclGetName(void *opaque_decl) override;<br>
<br>
-    lldb::VariableSP<br>
-    DeclGetVariable(void *opaque_decl) override;<br>
-<br>
-    void<br>
-    DeclLinkToObject(void *opaque_decl, std::shared_ptr<void> object) override;<br>
-<br>
     //----------------------------------------------------------------------<br>
     // CompilerDeclContext functions<br>
     //----------------------------------------------------------------------<br>
<br>
Modified: lldb/trunk/include/lldb/Symbol/TypeSystem.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Symbol/TypeSystem.h?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/include/lldb/Symbol/TypeSystem.h (original)<br>
+++ lldb/trunk/include/lldb/Symbol/TypeSystem.h Mon May 23 13:30:59 2016<br>
@@ -127,12 +127,6 @@ public:<br>
     virtual ConstString<br>
     DeclGetMangledName (void *opaque_decl);<br>
<br>
-    virtual lldb::VariableSP<br>
-    DeclGetVariable (void *opaque_decl) = 0;<br>
-<br>
-    virtual void<br>
-    DeclLinkToObject (void *opaque_decl, std::shared_ptr<void> object) = 0;<br>
-<br>
     virtual CompilerDeclContext<br>
     DeclGetDeclContext (void *opaque_decl);<br>
<br>
<br>
Added: lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/TestRedefinitionsInInlines.py<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/TestRedefinitionsInInlines.py?rev=270474&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/TestRedefinitionsInInlines.py?rev=270474&view=auto</a><br>
==============================================================================<br>
--- lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/TestRedefinitionsInInlines.py (added)<br>
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/TestRedefinitionsInInlines.py Mon May 23 13:30:59 2016<br>
@@ -0,0 +1,4 @@<br>
+from lldbsuite.test import lldbinline<br>
+from lldbsuite.test import decorators<br>
+<br>
+lldbinline.MakeInlineTest(__file__, globals(), [])<br>
<br>
Added: lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/main.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/main.c?rev=270474&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/main.c?rev=270474&view=auto</a><br>
==============================================================================<br>
--- lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/main.c (added)<br>
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/c/inlines/main.c Mon May 23 13:30:59 2016<br>
@@ -0,0 +1,19 @@<br>
+#include <stdio.h><br>
+<br>
+void test1(int) __attribute__ ((always_inline));<br>
+void test2(int) __attribute__ ((always_inline));<br>
+<br>
+void test2(int b) {<br>
+    printf("test2(%d)\n", b); //% self.expect("expression b", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["42"])<br>
+}<br>
+<br>
+void test1(int a) {<br>
+    printf("test1(%d)\n",  a);<br>
+    test2(a+1);//% self.dbg.HandleCommand("step")<br>
+               //% self.expect("expression b", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["24"])<br>
+}<br>
+<br>
+int main() {<br>
+    test2(42);<br>
+    test1(23);<br>
+}<br>
<br>
Modified: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp (original)<br>
+++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp Mon May 23 13:30:59 2016<br>
@@ -1260,7 +1260,16 @@ ClangExpressionDeclMap::FindExternalVisi<br>
                 bool variable_found = false;<br>
                 for (CompilerDecl decl : found_decls)<br>
                 {<br>
-                    var = decl.GetAsVariable();<br>
+                    for (size_t vi = 0, ve = vars->GetSize(); vi != ve; ++vi)<br>
+                    {<br>
+                        VariableSP candidate_var = vars->GetVariableAtIndex(vi);<br>
+                        if (candidate_var->GetDecl() == decl)<br>
+                        {<br>
+                            var = candidate_var;<br>
+                            break;<br>
+                        }<br>
+                    }<br>
+<br>
                     if (var)<br>
                     {<br>
                         variable_found = true;<br>
<br>
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp (original)<br>
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp Mon May 23 13:30:59 2016<br>
@@ -3607,6 +3607,14 @@ DWARFASTParserClang::GetClangDeclForDIE<br>
         m_decl_to_die[decl].insert(die.GetDIE());<br>
         return decl;<br>
     }<br>
+<br>
+    if (DWARFDIE abstract_origin_die = die.GetReferencedDIE(DW_AT_abstract_origin))<br>
+    {<br>
+        clang::Decl *decl = GetClangDeclForDIE(abstract_origin_die);<br>
+        m_die_to_decl[die.GetDIE()] = decl;<br>
+        m_decl_to_die[decl].insert(die.GetDIE());<br>
+        return decl;<br>
+    }<br>
<br>
     clang::Decl *decl = nullptr;<br>
     switch (die.Tag())<br>
<br>
Modified: lldb/trunk/source/Symbol/ClangASTContext.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/ClangASTContext.cpp?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Symbol/ClangASTContext.cpp (original)<br>
+++ lldb/trunk/source/Symbol/ClangASTContext.cpp Mon May 23 13:30:59 2016<br>
@@ -9595,24 +9595,6 @@ ClangASTContext::LayoutRecordType(void *<br>
 //----------------------------------------------------------------------<br>
 // CompilerDecl override functions<br>
 //----------------------------------------------------------------------<br>
-lldb::VariableSP<br>
-ClangASTContext::DeclGetVariable (void *opaque_decl)<br>
-{<br>
-    if (llvm::dyn_cast<clang::VarDecl>((clang::Decl *)opaque_decl))<br>
-    {<br>
-        auto decl_search_it = m_decl_objects.find(opaque_decl);<br>
-        if (decl_search_it != m_decl_objects.end())<br>
-            return std::static_pointer_cast<Variable>(decl_search_it->second);<br>
-    }<br>
-    return VariableSP();<br>
-}<br>
-<br>
-void<br>
-ClangASTContext::DeclLinkToObject (void *opaque_decl, std::shared_ptr<void> object)<br>
-{<br>
-    if (m_decl_objects.find(opaque_decl) == m_decl_objects.end())<br>
-        m_decl_objects.insert(std::make_pair(opaque_decl, object));<br>
-}<br>
<br>
 ConstString<br>
 ClangASTContext::DeclGetName (void *opaque_decl)<br>
<br>
Modified: lldb/trunk/source/Symbol/CompilerDecl.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CompilerDecl.cpp?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/CompilerDecl.cpp?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Symbol/CompilerDecl.cpp (original)<br>
+++ lldb/trunk/source/Symbol/CompilerDecl.cpp Mon May 23 13:30:59 2016<br>
@@ -31,12 +31,6 @@ CompilerDecl::GetMangledName () const<br>
     return m_type_system->DeclGetMangledName(m_opaque_decl);<br>
 }<br>
<br>
-lldb::VariableSP<br>
-CompilerDecl::GetAsVariable ()<br>
-{<br>
-    return m_type_system->DeclGetVariable(m_opaque_decl);<br>
-}<br>
-<br>
 CompilerDeclContext<br>
 CompilerDecl::GetDeclContext() const<br>
 {<br>
<br>
Modified: lldb/trunk/source/Symbol/JavaASTContext.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/JavaASTContext.cpp?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/JavaASTContext.cpp?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Symbol/JavaASTContext.cpp (original)<br>
+++ lldb/trunk/source/Symbol/JavaASTContext.cpp Mon May 23 13:30:59 2016<br>
@@ -535,17 +535,6 @@ JavaASTContext::DeclGetName(void *opaque<br>
     return ConstString();<br>
 }<br>
<br>
-lldb::VariableSP<br>
-JavaASTContext::DeclGetVariable(void *opaque_decl)<br>
-{<br>
-    return lldb::VariableSP();<br>
-}<br>
-<br>
-void<br>
-JavaASTContext::DeclLinkToObject(void *opaque_decl, std::shared_ptr<void> object)<br>
-{<br>
-}<br>
-<br>
 std::vector<CompilerDecl><br>
 JavaASTContext::DeclContextFindDeclByName(void *opaque_decl_ctx, ConstString name, const bool ignore_imported_decls)<br>
 {<br>
<br>
Modified: lldb/trunk/source/Symbol/Variable.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Variable.cpp?rev=270474&r1=270473&r2=270474&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Variable.cpp?rev=270474&r1=270473&r2=270474&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Symbol/Variable.cpp (original)<br>
+++ lldb/trunk/source/Symbol/Variable.cpp Mon May 23 13:30:59 2016<br>
@@ -252,15 +252,8 @@ Variable::GetDeclContext ()<br>
 CompilerDecl<br>
 Variable::GetDecl ()<br>
 {<br>
-    CompilerDecl decl;<br>
     Type *type = GetType();<br>
-    if (type)<br>
-    {<br>
-        decl = type->GetSymbolFile()->GetDeclForUID(GetID());<br>
-        if (decl)<br>
-            decl.GetTypeSystem()->DeclLinkToObject(decl.GetOpaqueDecl(), shared_from_this());<br>
-    }<br>
-    return decl;<br>
+    return type ? type->GetSymbolFile()->GetDeclForUID(GetID()) : CompilerDecl();<br>
 }<br>
<br>
 void<br>
<br>
<br>
_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a><br>
</blockquote></div>