Author: Michael Buch Date: 2025-06-06T17:17:00+01:00 New Revision: 30f524090542d07067234c292c15d4a4129b4aea
URL: https://github.com/llvm/llvm-project/commit/30f524090542d07067234c292c15d4a4129b4aea DIFF: https://github.com/llvm/llvm-project/commit/30f524090542d07067234c292c15d4a4129b4aea.diff LOG: [lldb][Modules] Make decls from submodules visible for name lookup (#143098) 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. Added: Modified: lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py Removed: ################################################################################ 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..d044ad46637fe 100644 --- a/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py +++ b/lldb/test/API/lang/cpp/decl-from-submodule/TestDeclFromSubmodule.py @@ -11,17 +11,11 @@ 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")) - # 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") _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits