aboutsummaryrefslogtreecommitdiff
path: root/lldb/test
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/test')
-rw-r--r--lldb/test/API/commands/expression/weak_symbols/TestWeakSymbols.py2
-rw-r--r--lldb/test/API/commands/frame/select-hidden/Makefile3
-rw-r--r--lldb/test/API/commands/frame/select-hidden/TestNavigateHiddenFrame.py32
-rw-r--r--lldb/test/API/commands/frame/select-hidden/main.cpp13
-rw-r--r--lldb/test/API/lang/cpp/libcxx-internals-recognizer/TestLibcxxInternalsRecognizer.py2
-rw-r--r--lldb/test/API/lang/objc/modules-auto-import/TestModulesAutoImport.py1
-rw-r--r--lldb/test/API/lang/objc/modules-objc-property/TestModulesObjCProperty.py1
-rw-r--r--lldb/test/API/test_utils/pdb/Makefile3
-rw-r--r--lldb/test/API/test_utils/pdb/TestPdb.py18
-rw-r--r--lldb/test/API/test_utils/pdb/main.cpp1
-rw-r--r--lldb/test/API/tools/lldb-dap/disconnect/TestDAP_disconnect.py9
-rw-r--r--lldb/test/API/tools/lldb-dap/server/TestDAP_server.py3
-rw-r--r--lldb/test/CMakeLists.txt2
-rw-r--r--lldb/test/Shell/DAP/TestClientLauncher.test2
-rw-r--r--lldb/test/Shell/ExecControl/StopHook/stop-hook-list-format.test36
-rw-r--r--lldb/test/Shell/Recognizer/Inputs/verbose_trap.m4
-rw-r--r--lldb/test/Shell/Recognizer/registration-unique.test56
-rw-r--r--lldb/test/Shell/Recognizer/verbose_trap-objc.test12
18 files changed, 191 insertions, 9 deletions
diff --git a/lldb/test/API/commands/expression/weak_symbols/TestWeakSymbols.py b/lldb/test/API/commands/expression/weak_symbols/TestWeakSymbols.py
index 50efecb..bed129a 100644
--- a/lldb/test/API/commands/expression/weak_symbols/TestWeakSymbols.py
+++ b/lldb/test/API/commands/expression/weak_symbols/TestWeakSymbols.py
@@ -15,7 +15,7 @@ class TestWeakSymbolsInExpressions(TestBase):
NO_DEBUG_INFO_TESTCASE = True
@skipUnlessDarwin
- @skipIf(compiler="clang", compiler_version=["<", "7.0"])
+ @skipIf(compiler="clang", compiler_version=["<", "19.0"])
def test_weak_symbol_in_expr(self):
"""Tests that we can refer to weak symbols in expressions."""
self.build()
diff --git a/lldb/test/API/commands/frame/select-hidden/Makefile b/lldb/test/API/commands/frame/select-hidden/Makefile
new file mode 100644
index 0000000..99998b2
--- /dev/null
+++ b/lldb/test/API/commands/frame/select-hidden/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
diff --git a/lldb/test/API/commands/frame/select-hidden/TestNavigateHiddenFrame.py b/lldb/test/API/commands/frame/select-hidden/TestNavigateHiddenFrame.py
new file mode 100644
index 0000000..698447b5
--- /dev/null
+++ b/lldb/test/API/commands/frame/select-hidden/TestNavigateHiddenFrame.py
@@ -0,0 +1,32 @@
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+
+class NavigateHiddenFrameTestCase(TestBase):
+ NO_DEBUG_INFO_TESTCASE = True
+
+ @add_test_categories(["libc++"])
+ def test(self):
+ """Test going up/down a backtrace but we started in a hidden frame."""
+ self.build()
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(
+ self, "Break here", lldb.SBFileSpec("main.cpp")
+ )
+ # up
+ self.assertIn("__impl2", thread.selected_frame.GetFunctionName())
+ self.expect("up")
+ self.assertIn("__impl1", thread.selected_frame.GetFunctionName())
+ self.expect("up")
+ self.assertIn("__impl", thread.selected_frame.GetFunctionName())
+ self.expect("up")
+ self.assertIn("non_impl", thread.selected_frame.GetFunctionName())
+
+ # Back down again.
+ self.expect("down")
+ self.assertIn("__impl", thread.selected_frame.GetFunctionName())
+ self.expect("down")
+ self.assertIn("__impl1", thread.selected_frame.GetFunctionName())
+ self.expect("down")
+ self.assertIn("__impl2", thread.selected_frame.GetFunctionName())
diff --git a/lldb/test/API/commands/frame/select-hidden/main.cpp b/lldb/test/API/commands/frame/select-hidden/main.cpp
new file mode 100644
index 0000000..dc97abb
--- /dev/null
+++ b/lldb/test/API/commands/frame/select-hidden/main.cpp
@@ -0,0 +1,13 @@
+namespace std {
+namespace __1 {
+static const char *__impl2() { return "Break here"; }
+static const char *__impl1() { return __impl2(); }
+static const char *__impl() { return __impl1(); }
+static const char *non_impl() { return __impl(); }
+} // namespace __1
+} // namespace std
+
+int main() {
+ std::__1::non_impl();
+ __builtin_debugtrap();
+}
diff --git a/lldb/test/API/lang/cpp/libcxx-internals-recognizer/TestLibcxxInternalsRecognizer.py b/lldb/test/API/lang/cpp/libcxx-internals-recognizer/TestLibcxxInternalsRecognizer.py
index 2f942da..eeb5d1b 100644
--- a/lldb/test/API/lang/cpp/libcxx-internals-recognizer/TestLibcxxInternalsRecognizer.py
+++ b/lldb/test/API/lang/cpp/libcxx-internals-recognizer/TestLibcxxInternalsRecognizer.py
@@ -9,7 +9,7 @@ class LibCxxInternalsRecognizerTestCase(TestBase):
NO_DEBUG_INFO_TESTCASE = True
@add_test_categories(["libc++"])
- @skipIf(compiler="clang", compiler_version=["<=", "19.0"])
+ @skipIf(compiler="clang", compiler_version=["<", "21.0"])
def test_frame_recognizer(self):
"""Test that implementation details of libc++ are hidden"""
self.build()
diff --git a/lldb/test/API/lang/objc/modules-auto-import/TestModulesAutoImport.py b/lldb/test/API/lang/objc/modules-auto-import/TestModulesAutoImport.py
index 142d27d..f3558f6 100644
--- a/lldb/test/API/lang/objc/modules-auto-import/TestModulesAutoImport.py
+++ b/lldb/test/API/lang/objc/modules-auto-import/TestModulesAutoImport.py
@@ -16,6 +16,7 @@ class ObjCModulesAutoImportTestCase(TestBase):
self.line = line_number("main.m", "// Set breakpoint 0 here.")
@skipIf(macos_version=["<", "10.12"])
+ @skipIf(compiler="clang", compiler_version=["<", "19.0"])
def test_expr(self):
self.build()
exe = self.getBuildArtifact("a.out")
diff --git a/lldb/test/API/lang/objc/modules-objc-property/TestModulesObjCProperty.py b/lldb/test/API/lang/objc/modules-objc-property/TestModulesObjCProperty.py
index 3be064a..657a710 100644
--- a/lldb/test/API/lang/objc/modules-objc-property/TestModulesObjCProperty.py
+++ b/lldb/test/API/lang/objc/modules-objc-property/TestModulesObjCProperty.py
@@ -6,6 +6,7 @@ from lldbsuite.test import lldbutil
class TestCase(TestBase):
@no_debug_info_test
+ @skipIf(compiler="clang", compiler_version=["<", "19.0"])
def test_conflicting_properties(self):
"""Tests receiving two properties with the same name from modules."""
self.build()
diff --git a/lldb/test/API/test_utils/pdb/Makefile b/lldb/test/API/test_utils/pdb/Makefile
new file mode 100644
index 0000000..99998b2
--- /dev/null
+++ b/lldb/test/API/test_utils/pdb/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
diff --git a/lldb/test/API/test_utils/pdb/TestPdb.py b/lldb/test/API/test_utils/pdb/TestPdb.py
new file mode 100644
index 0000000..bd3a9d0
--- /dev/null
+++ b/lldb/test/API/test_utils/pdb/TestPdb.py
@@ -0,0 +1,18 @@
+"""
+Test PDB enabled tests
+"""
+
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+
+
+class TestBuildMethod(TestBase):
+ TEST_WITH_PDB_DEBUG_INFO = True
+
+ def test(self):
+ self.build()
+ self.assertTrue(self.dbg.CreateTarget(self.getBuildArtifact()))
+ if self.getDebugInfo() == "pdb":
+ self.expect(
+ "target modules dump symfile", patterns=["SymbolFile (native-)?pdb"]
+ )
diff --git a/lldb/test/API/test_utils/pdb/main.cpp b/lldb/test/API/test_utils/pdb/main.cpp
new file mode 100644
index 0000000..76e8197
--- /dev/null
+++ b/lldb/test/API/test_utils/pdb/main.cpp
@@ -0,0 +1 @@
+int main() { return 0; }
diff --git a/lldb/test/API/tools/lldb-dap/disconnect/TestDAP_disconnect.py b/lldb/test/API/tools/lldb-dap/disconnect/TestDAP_disconnect.py
index 09e3f62..19f88d8 100644
--- a/lldb/test/API/tools/lldb-dap/disconnect/TestDAP_disconnect.py
+++ b/lldb/test/API/tools/lldb-dap/disconnect/TestDAP_disconnect.py
@@ -3,17 +3,15 @@ Test lldb-dap disconnect request
"""
-import dap_server
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
import lldbdap_testcase
-import subprocess
import time
import os
-class TestDAP_launch(lldbdap_testcase.DAPTestCaseBase):
+class TestDAP_disconnect(lldbdap_testcase.DAPTestCaseBase):
source = "main.cpp"
def disconnect_and_assert_no_output_printed(self):
@@ -67,10 +65,11 @@ class TestDAP_launch(lldbdap_testcase.DAPTestCaseBase):
lambda: self.run_platform_command("rm %s" % (sync_file_path))
)
- self.process = subprocess.Popen([program, sync_file_path])
+ proc = self.spawnSubprocess(program, [sync_file_path])
lldbutil.wait_for_file_on_target(self, sync_file_path)
- self.attach(pid=self.process.pid, disconnectAutomatically=False)
+ self.attach(pid=proc.pid, disconnectAutomatically=False, stopOnEntry=True)
+ self.continue_to_next_stop()
response = self.dap_server.request_evaluate("wait_for_attach = false;")
self.assertTrue(response["success"])
diff --git a/lldb/test/API/tools/lldb-dap/server/TestDAP_server.py b/lldb/test/API/tools/lldb-dap/server/TestDAP_server.py
index 12b321c..3c53cf2 100644
--- a/lldb/test/API/tools/lldb-dap/server/TestDAP_server.py
+++ b/lldb/test/API/tools/lldb-dap/server/TestDAP_server.py
@@ -37,7 +37,7 @@ class TestDAP_server(lldbdap_testcase.DAPTestCaseBase):
def run_debug_session(self, connection, name, sleep_seconds_in_middle=None):
self.dap_server = dap_server.DebugAdapterServer(
- connection=connection,
+ connection=connection, spawn_helper=self.spawnSubprocess
)
program = self.getBuildArtifact("a.out")
source = "main.c"
@@ -94,6 +94,7 @@ class TestDAP_server(lldbdap_testcase.DAPTestCaseBase):
(process, connection) = self.start_server(connection="listen://localhost:0")
self.dap_server = dap_server.DebugAdapterServer(
connection=connection,
+ spawn_helper=self.spawnSubprocess,
)
program = self.getBuildArtifact("a.out")
source = "main.c"
diff --git a/lldb/test/CMakeLists.txt b/lldb/test/CMakeLists.txt
index 513d1ec..818dff5 100644
--- a/lldb/test/CMakeLists.txt
+++ b/lldb/test/CMakeLists.txt
@@ -202,7 +202,7 @@ if(TARGET clang)
else()
# We require libcxx for the test suite, so if we aren't building it,
# provide a helpful error about how to resolve the situation.
- if(NOT LLDB_HAS_LIBCXX)
+ if(LLDB_ENFORCE_STRICT_TEST_REQUIREMENTS AND NOT LLDB_HAS_LIBCXX)
message(SEND_ERROR
"LLDB test suite requires libc++, but it is currently disabled. "
"Please add `libcxx` to `LLVM_ENABLE_RUNTIMES` or disable tests via "
diff --git a/lldb/test/Shell/DAP/TestClientLauncher.test b/lldb/test/Shell/DAP/TestClientLauncher.test
new file mode 100644
index 0000000..a79a940
--- /dev/null
+++ b/lldb/test/Shell/DAP/TestClientLauncher.test
@@ -0,0 +1,2 @@
+# RUN: lldb-dap --client vscode-url -- /path/to/foo | FileCheck %s
+# CHECK: vscode://llvm-vs-code-extensions.lldb-dap/start?program=%2Fpath%2Fto%2Ffoo
diff --git a/lldb/test/Shell/ExecControl/StopHook/stop-hook-list-format.test b/lldb/test/Shell/ExecControl/StopHook/stop-hook-list-format.test
new file mode 100644
index 0000000..a955780
--- /dev/null
+++ b/lldb/test/Shell/ExecControl/StopHook/stop-hook-list-format.test
@@ -0,0 +1,36 @@
+# Test format (e.g., indentation) when printing the list of stop hooks.
+#
+# RUN: %lldb -b -s %s | FileCheck %s --match-full-lines --strict-whitespace
+
+# Create some stop hooks
+target stop-hook add -o 'print "Hello"' --auto-continue true --at-initial-stop true
+target stop-hook add -o 'print "world,"' -o 'print "nice"' --file 'my_file'
+target stop-hook add -o 'print "weather!"' --classname 'MyClass' --thread-name 'my_thread'
+
+# Print hooks
+target stop-hook list
+
+# CHECK:(lldb) target stop-hook list
+# CHECK:Hook: 1
+# CHECK: State: enabled
+# CHECK: AutoContinue on
+# CHECK: Commands:
+# CHECK: print "Hello"
+# CHECK-EMPTY:
+# CHECK:Hook: 2
+# CHECK: State: enabled
+# CHECK: Specifier:
+# CHECK: File: my_file.
+# CHECK: Commands:
+# CHECK: print "world,"
+# CHECK: print "nice"
+# CHECK-EMPTY:
+# CHECK:Hook: 3
+# CHECK: State: enabled
+# CHECK: Specifier:
+# CHECK: Class name: MyClass.
+# CHECK: Thread:
+# CHECK: thread name: "my_thread"
+# CHECK: Commands:
+# CHECK: print "weather!"
+# CHECK-EMPTY:
diff --git a/lldb/test/Shell/Recognizer/Inputs/verbose_trap.m b/lldb/test/Shell/Recognizer/Inputs/verbose_trap.m
new file mode 100644
index 0000000..83a829a
--- /dev/null
+++ b/lldb/test/Shell/Recognizer/Inputs/verbose_trap.m
@@ -0,0 +1,4 @@
+int main() {
+ __builtin_verbose_trap("Foo", "Bar");
+ return 0;
+}
diff --git a/lldb/test/Shell/Recognizer/registration-unique.test b/lldb/test/Shell/Recognizer/registration-unique.test
new file mode 100644
index 0000000..34400d9
--- /dev/null
+++ b/lldb/test/Shell/Recognizer/registration-unique.test
@@ -0,0 +1,56 @@
+# UNSUPPORTED: system-windows
+
+# Checks that the recognizers that should work across language runtimes
+# are only registered once with the target.
+
+# RUN: split-file %s %t
+
+# RUN: %clang_host %t/main.cpp -g -o %t/cpp.out
+# RUN: %lldb -b -s %t/commands.input %t/cpp.out | FileCheck %s
+
+# RUN: %clang_host -x objective-c++ %t/main.mm -g -o %t/objcxx.out
+# RUN: %lldb -b -s %t/commands.input %t/objcxx.out | FileCheck %s
+
+# RUN: %clang_host %t/main.c -g -o %t/c.out
+# RUN: %lldb -b -s %t/commands.input %t/c.out | FileCheck %s
+
+# RUN: %clang_host -x objective-c %t/main.m -g -o %t/objc.out
+# RUN: %lldb -b -s %t/commands.input %t/objc.out | FileCheck %s
+
+#--- main.m
+int main() {}
+
+#--- main.c
+int main() {}
+
+#--- main.mm
+int main() {}
+
+#--- main.cpp
+int main() {}
+
+#--- commands.input
+
+b main
+frame recognizer list
+run
+frame recognizer list
+continue
+run
+frame recognizer list
+
+# CHECK: frame recognizer list
+# CHECK-NEXT: no matching results found.
+
+# CHECK: frame recognizer list
+# CHECK-DAG: Verbose Trap StackFrame Recognizer
+# CHECK-DAG: Assert StackFrame Recognizer
+# CHECK-NOT: Verbose Trap StackFrame Recognizer
+# CHECK-NOT: Assert StackFrame Recognizer
+
+# FIXME: avoid duplicate frame recognizers in the target: https://github.com/llvm/llvm-project/issues/166341
+# CHECK: frame recognizer list
+# CHECK-DAG: Verbose Trap StackFrame Recognizer
+# CHECK-DAG: Assert StackFrame Recognizer
+# CHECK-DAG: Verbose Trap StackFrame Recognizer
+# CHECK-DAG: Assert StackFrame Recognizer
diff --git a/lldb/test/Shell/Recognizer/verbose_trap-objc.test b/lldb/test/Shell/Recognizer/verbose_trap-objc.test
new file mode 100644
index 0000000..789e79c
--- /dev/null
+++ b/lldb/test/Shell/Recognizer/verbose_trap-objc.test
@@ -0,0 +1,12 @@
+# REQUIRES: system-darwin
+#
+# RUN: %clangxx_host -x objective-c -g %S/Inputs/verbose_trap.m -o %t.out
+# RUN: %lldb -b -s %s %t.out | FileCheck %s
+
+run
+# CHECK: thread #{{.*}}stop reason = Foo: Bar
+frame info
+# CHECK: frame #{{.*}}`main at verbose_trap.m
+frame recognizer info 0
+# CHECK: frame 0 is recognized by Verbose Trap StackFrame Recognizer
+q