aboutsummaryrefslogtreecommitdiff
path: root/lldb/test
diff options
context:
space:
mode:
authorPablo Busse <Pablo.Busse@microsoft.com>2024-03-31 09:17:32 -0700
committerGitHub <noreply@github.com>2024-03-31 17:17:32 +0100
commit154cea46732f4014bb409f1bcac9b39ac56df193 (patch)
treef5a8eaa86f7cdba75006341dd44fe5be049a6cec /lldb/test
parent45f5fa2925142edf9a3d1648fac6c1f80b360175 (diff)
downloadllvm-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')
-rw-r--r--lldb/test/API/functionalities/type_find_first/Makefile2
-rw-r--r--lldb/test/API/functionalities/type_find_first/TestFindFirstType.py27
-rw-r--r--lldb/test/API/functionalities/type_find_first/main.cpp5
-rw-r--r--lldb/test/API/functionalities/type_find_first/other.cpp4
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