diff options
author | Pablo Busse <Pablo.Busse@microsoft.com> | 2024-03-31 09:17:32 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-31 17:17:32 +0100 |
commit | 154cea46732f4014bb409f1bcac9b39ac56df193 (patch) | |
tree | f5a8eaa86f7cdba75006341dd44fe5be049a6cec /lldb/test | |
parent | 45f5fa2925142edf9a3d1648fac6c1f80b360175 (diff) | |
download | llvm-154cea46732f4014bb409f1bcac9b39ac56df193.zip llvm-154cea46732f4014bb409f1bcac9b39ac56df193.tar.gz llvm-154cea46732f4014bb409f1bcac9b39ac56df193.tar.bz2 |
[lldb] Fix type lookup in DWARF .o files via debug map (#87177)
An inverted condition causes `SymbolFileDWARFDebugMap::FindTypes` to
bail out after inspecting the first .o file in each module.
The same kind of bug is found in
`SymbolFileDWARFDebugMap::ParseDeclsForContext`.
Correct both early exit conditions and add a regression test for lookup
of up a type defined in a secondary compilation unit.
Fixes #87176
Diffstat (limited to 'lldb/test')
4 files changed, 24 insertions, 14 deletions
diff --git a/lldb/test/API/functionalities/type_find_first/Makefile b/lldb/test/API/functionalities/type_find_first/Makefile index 3d0b98f..e027553 100644 --- a/lldb/test/API/functionalities/type_find_first/Makefile +++ b/lldb/test/API/functionalities/type_find_first/Makefile @@ -1,2 +1,2 @@ -CXX_SOURCES := main.cpp +CXX_SOURCES := main.cpp other.cpp include Makefile.rules diff --git a/lldb/test/API/functionalities/type_find_first/TestFindFirstType.py b/lldb/test/API/functionalities/type_find_first/TestFindFirstType.py index 6347a35..b1c5659 100644 --- a/lldb/test/API/functionalities/type_find_first/TestFindFirstType.py +++ b/lldb/test/API/functionalities/type_find_first/TestFindFirstType.py @@ -8,8 +8,6 @@ from lldbsuite.test import lldbutil class TypeFindFirstTestCase(TestBase): - NO_DEBUG_INFO_TESTCASE = True - def test_find_first_type(self): """ Test SBTarget::FindFirstType() and SBModule::FindFirstType() APIs. @@ -19,19 +17,22 @@ class TypeFindFirstTestCase(TestBase): basename, FindFirstType() could end up failing depending on which type was found first in the debug info indexes. This test will ensure this doesn't regress in the future. + + The test also looks for a type defined in a different compilation unit + to verify that SymbolFileDWARFDebugMap searches each symbol file in a + module. """ self.build() target = self.createTestTarget() - # Test the SBTarget APIs for FindFirstType - integer_type = target.FindFirstType("Integer::Point") - self.assertTrue(integer_type.IsValid()) - float_type = target.FindFirstType("Float::Point") - self.assertTrue(float_type.IsValid()) - - # Test the SBModule APIs for FindFirstType exe_module = target.GetModuleAtIndex(0) self.assertTrue(exe_module.IsValid()) - integer_type = exe_module.FindFirstType("Integer::Point") - self.assertTrue(integer_type.IsValid()) - float_type = exe_module.FindFirstType("Float::Point") - self.assertTrue(float_type.IsValid()) + # Test the SBTarget and SBModule APIs for FindFirstType + for api in [target, exe_module]: + integer_type = api.FindFirstType("Integer::Point") + self.assertTrue(integer_type.IsValid()) + float_type = api.FindFirstType("Float::Point") + self.assertTrue(float_type.IsValid()) + external_type = api.FindFirstType("OtherCompilationUnit::Type") + self.assertTrue(external_type.IsValid()) + nonexistent_type = api.FindFirstType("NonexistentType") + self.assertFalse(nonexistent_type.IsValid()) diff --git a/lldb/test/API/functionalities/type_find_first/main.cpp b/lldb/test/API/functionalities/type_find_first/main.cpp index f4e4672..bbb0608 100644 --- a/lldb/test/API/functionalities/type_find_first/main.cpp +++ b/lldb/test/API/functionalities/type_find_first/main.cpp @@ -10,8 +10,13 @@ struct Point { }; } // namespace Float +namespace OtherCompilationUnit { +void Function(); +} // namespace OtherCompilationUnit + int main(int argc, char const *argv[]) { Integer::Point ip = {2, 3}; Float::Point fp = {2.0, 3.0}; + OtherCompilationUnit::Function(); return 0; } diff --git a/lldb/test/API/functionalities/type_find_first/other.cpp b/lldb/test/API/functionalities/type_find_first/other.cpp new file mode 100644 index 0000000..b91edcd --- /dev/null +++ b/lldb/test/API/functionalities/type_find_first/other.cpp @@ -0,0 +1,4 @@ +namespace OtherCompilationUnit { +struct Type {}; +void Function() { Type typeIsActuallyUsed; } +} // namespace OtherCompilationUnit
\ No newline at end of file |