This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGfdc6aea3fd82: [lldb] Check Decl kind when completing 
-flimit-debug-info types (authored by labath).

Changed prior to commit:
  https://reviews.llvm.org/D85904?vs=285352&id=285618#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85904/new/

https://reviews.llvm.org/D85904

Files:
  lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp
  lldb/test/API/functionalities/limit-debug-info/TestLimitDebugInfo.py
  lldb/test/API/functionalities/limit-debug-info/main.cpp
  lldb/test/API/functionalities/limit-debug-info/one.cpp
  lldb/test/API/functionalities/limit-debug-info/onetwo.h

Index: lldb/test/API/functionalities/limit-debug-info/onetwo.h
===================================================================
--- lldb/test/API/functionalities/limit-debug-info/onetwo.h
+++ lldb/test/API/functionalities/limit-debug-info/onetwo.h
@@ -54,3 +54,13 @@
   virtual ~Two();
 };
 } // namespace result
+
+namespace func_shadow {
+void One(int);
+struct One {
+  int one = 142;
+  constexpr One() = default;
+  virtual ~One();
+};
+void One(float);
+} // namespace func_shadow
Index: lldb/test/API/functionalities/limit-debug-info/one.cpp
===================================================================
--- lldb/test/API/functionalities/limit-debug-info/one.cpp
+++ lldb/test/API/functionalities/limit-debug-info/one.cpp
@@ -6,3 +6,7 @@
 
 result::One::One(int member) : member(member) {}
 result::One::~One() = default;
+
+void func_shadow::One(int) {}
+func_shadow::One::~One() = default;
+void func_shadow::One(float) {}
Index: lldb/test/API/functionalities/limit-debug-info/main.cpp
===================================================================
--- lldb/test/API/functionalities/limit-debug-info/main.cpp
+++ lldb/test/API/functionalities/limit-debug-info/main.cpp
@@ -1,23 +1,19 @@
 #include "onetwo.h"
 
 struct InheritsFromOne : One {
-  constexpr InheritsFromOne() = default;
   int member = 47;
 } inherits_from_one;
 
 struct InheritsFromTwo : Two {
-  constexpr InheritsFromTwo() = default;
   int member = 47;
 } inherits_from_two;
 
 struct OneAsMember {
-  constexpr OneAsMember() = default;
   member::One one;
   int member = 47;
 } one_as_member;
 
 struct TwoAsMember {
-  constexpr TwoAsMember() = default;
   member::Two two;
   int member = 47;
 } two_as_member;
@@ -28,4 +24,9 @@
 result::One get_one() { return result::One(124); }
 result::Two get_two() { return result::Two(224); }
 
+// Note that there's also a function with the name func_shadow::One.
+struct ShadowedOne : func_shadow::One {
+  int member = 47;
+} shadowed_one;
+
 int main() { return get_one().member; }
Index: lldb/test/API/functionalities/limit-debug-info/TestLimitDebugInfo.py
===================================================================
--- lldb/test/API/functionalities/limit-debug-info/TestLimitDebugInfo.py
+++ lldb/test/API/functionalities/limit-debug-info/TestLimitDebugInfo.py
@@ -63,6 +63,9 @@
         self.expect_expr("get_two().one().member", result_value="124")
         self.expect_expr("get_two().member", result_value="224")
 
+        self.expect_expr("shadowed_one.member", result_value="47")
+        self.expect_expr("shadowed_one.one", result_value="142")
+
     @skipIf(bugnumber="pr46284", debug_info="gmodules")
     @skipIfWindows # Clang emits type info even with -flimit-debug-info
     def test_two_debug(self):
Index: lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp
===================================================================
--- lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp
+++ lldb/source/Plugins/ExpressionParser/Clang/ClangASTImporter.cpp
@@ -870,13 +870,14 @@
       return dn_or_err.takeError();
     DeclContext *dc = *dc_or_err;
     DeclContext::lookup_result lr = dc->lookup(*dn_or_err);
-    if (lr.size()) {
-      clang::Decl *lookup_found = lr.front();
-      RegisterImportedDecl(From, lookup_found);
-      m_decls_to_ignore.insert(lookup_found);
-      return lookup_found;
-    } else
-      LLDB_LOG(log, "[ClangASTImporter] Complete definition not found");
+    for (clang::Decl *candidate : lr) {
+      if (candidate->getKind() == From->getKind()) {
+        RegisterImportedDecl(From, candidate);
+        m_decls_to_ignore.insert(candidate);
+        return candidate;
+      }
+    }
+    LLDB_LOG(log, "[ClangASTImporter] Complete definition not found");
   }
 
   return ASTImporter::ImportImpl(From);
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to