[Lldb-commits] [lldb] [lldb][Modules] Make decls from submodules visible for name lookup (PR #143098)
Michael Buch via lldb-commits
lldb-commits at lists.llvm.org
Fri Jun 6 06:11:34 PDT 2025
https://github.com/Michael137 updated https://github.com/llvm/llvm-project/pull/143098
>From 902a6567d4c34790070a717ca31bd8fa0ee01c45 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Fri, 6 Jun 2025 10:26:17 +0100
Subject: [PATCH 1/3] [lldb][Modules] Make decls from submodules visible for
name lookup
This patch ensures we can find decls in submodules during expression
evaluation. Previously, submodules would have all their decls marked as
`Hidden`. When Clang asked LLDB for decls, it would see them in the
submodule but `clang::Sema` would reject them because they weren't `Visible`
(specifically, `getAcceptableDecl` would fail during `CppNameLookup`).
Here we just mark the submodule as visible to work around this problem.
---
.../Clang/ClangModulesDeclVendor.cpp | 7 +++++++
.../cpp/decl-from-submodule/TestDeclFromSubmodule.py | 12 ++----------
2 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
index c99ed9dd0a68d..284e5bc6fb1e5 100644
--- a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
+++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp
@@ -382,6 +382,13 @@ bool ClangModulesDeclVendorImpl::AddModule(const SourceModule &module,
}
}
+ // If we didn't make the submodule visible here, Clang wouldn't allow LLDB to
+ // pick any of the decls in the submodules during C++ name lookup.
+ if (submodule)
+ m_compiler_instance->makeModuleVisible(
+ submodule, clang::Module::NameVisibilityKind::AllVisible,
+ /*ImportLoc=*/{});
+
clang::Module *requested_module = DoGetModule(clang_path, true);
if (requested_module != nullptr) {
diff --git a/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py b/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py
index f200e51c7f794..26ef12adf139a 100644
--- a/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py
+++ b/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py
@@ -15,13 +15,5 @@ def test_expr(self):
self.build()
lldbutil.run_to_source_breakpoint(self, "return 0", lldb.SBFileSpec("main.cpp"))
- # FIXME: LLDB finds the decl for 'func' in the submodules correctly and hands it to Clang
- # but Sema rejects using the decl during name lookup because it is not marked "Visible".
- # However, this assertions still ensures that we at least don't fail to compile the
- # submodule (which would cause other errors to appear before the expression error, hence
- # we use "startstr").
- self.expect(
- "expr func(1, 2)",
- error=True,
- startstr="error: <user expression 0>:1:1: 'func' has unknown return type",
- )
+ self.expect_expr("func(1, 2)", result_type=int, result_value=3)
+ self.expect_expr("func(1)", result_type=int, result_value=1)
>From b22de21b5562827e034ff1bb91db4abf52f304de Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Fri, 6 Jun 2025 11:19:50 +0100
Subject: [PATCH 2/3] fixup! XFAIL on Linux
---
.../API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py b/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py
index 26ef12adf139a..d4509ad37e379 100644
--- a/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py
+++ b/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py
@@ -11,6 +11,8 @@
class DeclFromSubmoduleTestCase(TestBase):
# Requires DWARF debug info which is not retained when linking with link.exe.
@skipIfWindows
+ # Lookup for decls in submodules fails in Linux
+ @expectedFailureAll(oslist=["linux"])
def test_expr(self):
self.build()
lldbutil.run_to_source_breakpoint(self, "return 0", lldb.SBFileSpec("main.cpp"))
>From 98969e72d4204a68b2ab3d3c048096e0096b3719 Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Fri, 6 Jun 2025 14:11:24 +0100
Subject: [PATCH 3/3] fixup! fix test
---
.../API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py b/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py
index d4509ad37e379..d044ad46637fe 100644
--- a/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py
+++ b/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py
@@ -17,5 +17,5 @@ def test_expr(self):
self.build()
lldbutil.run_to_source_breakpoint(self, "return 0", lldb.SBFileSpec("main.cpp"))
- self.expect_expr("func(1, 2)", result_type=int, result_value=3)
- self.expect_expr("func(1)", result_type=int, result_value=1)
+ self.expect_expr("func(1, 2)", result_type="int", result_value="3")
+ self.expect_expr("func(1)", result_type="int", result_value="1")
More information about the lldb-commits
mailing list