[Lldb-commits] [lldb] 01c29d7 - [lldb][test] Skip the API tests a WebAssembly target cannot support (#213788)

via lldb-commits lldb-commits at lists.llvm.org
Tue Aug 4 08:04:11 PDT 2026


Author: Jonas Devlieghere
Date: 2026-08-04T08:04:06-07:00
New Revision: 01c29d71bdcce48d499e34223d1866fedee9a83b

URL: https://github.com/llvm/llvm-project/commit/01c29d71bdcce48d499e34223d1866fedee9a83b
DIFF: https://github.com/llvm/llvm-project/commit/01c29d71bdcce48d499e34223d1866fedee9a83b.diff

LOG: [lldb][test] Skip the API tests a WebAssembly target cannot support (#213788)

This is the final batch of skips. Together with a handful of local
changes to LLDB and WAMR, the test suite now passes when targeting
WebAssembly. Each test has a short comment explaining why it's skipped.

Added: 
    

Modified: 
    lldb/test/API/commands/command/nested_alias/TestNestedAlias.py
    lldb/test/API/commands/frame/recognizer/TestFrameRecognizer.py
    lldb/test/API/commands/platform/basic/TestPlatformCommand.py
    lldb/test/API/commands/process/launch/TestProcessLaunch.py
    lldb/test/API/commands/settings/TestSettings.py
    lldb/test/API/commands/settings/quoting/TestQuoting.py
    lldb/test/API/commands/statistics/basic/TestStats.py
    lldb/test/API/commands/target/basic/TestTargetCommand.py
    lldb/test/API/driver/quit_speed/TestQuitWithProcess.py
    lldb/test/API/functionalities/breakpoint/breakpoint_locations/after_rebuild/TestLocationsAfterRebuild.py
    lldb/test/API/functionalities/breakpoint/thread_plan_user_breakpoint/TestThreadPlanUserBreakpoint.py
    lldb/test/API/functionalities/bt-interrupt/TestInterruptBacktrace.py
    lldb/test/API/functionalities/expr-result-var/TestCPPExprResult.py
    lldb/test/API/functionalities/inferior-assert/TestInferiorAssert.py
    lldb/test/API/functionalities/multiple-slides/TestMultipleSlides.py
    lldb/test/API/functionalities/scripted_frame_provider/runlock_reentrant_deadlock/TestRunLockReentrantDeadlock.py
    lldb/test/API/functionalities/scripted_frame_provider/was_hit_deadlock/TestWasHitWithFrameProviderDeadlock.py
    lldb/test/API/functionalities/statusline/TestStatusline.py
    lldb/test/API/functionalities/thread/jump/TestThreadJump.py
    lldb/test/API/lang/c/const_variables/TestConstVariables.py
    lldb/test/API/lang/c/inlines/TestRedefinitionsInInlines.py
    lldb/test/API/lang/c/set_values/TestSetValues.py
    lldb/test/API/lang/c/stepping/TestStepAndBreakpoints.py
    lldb/test/API/lang/cpp/dynamic-value/TestDynamicValue.py
    lldb/test/API/lang/cpp/extern_c/TestExternCSymbols.py
    lldb/test/API/lang/cpp/function-local-class/TestCppFunctionLocalClass.py
    lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py
    lldb/test/API/lang/cpp/template/TestTemplateArgs.py
    lldb/test/API/python_api/find_in_memory/TestFindInMemory.py
    lldb/test/API/python_api/find_in_memory/TestFindRangesInMemory.py
    lldb/test/API/python_api/frame/TestFrames.py
    lldb/test/API/python_api/persistent_decls/TestPersistentDecls.py
    lldb/test/API/python_api/process/TestProcessAPI.py
    lldb/test/API/python_api/process/cancel_attach/TestCancelAttach.py
    lldb/test/API/python_api/target/TestTargetAPI.py
    lldb/test/API/python_api/thread/TestThreadAPI.py
    lldb/test/API/python_api/value/change_ptr/TestChangePtr.py
    lldb/test/API/python_api/value/change_values/TestChangeValueAPI.py
    lldb/test/API/tools/lldb-dap/attach-commands/TestDAP_attachCommands.py
    lldb/test/API/tools/lldb-dap/attach/TestDAP_attachByPortNum.py
    lldb/test/API/tools/lldb-dap/console/TestDAP_console.py
    lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py
    lldb/test/API/tools/lldb-dap/invalidated-event/TestDAP_invalidatedEvent.py
    lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_cwd.py
    lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_shellExpandArguments_enabled.py
    lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_stdio_redirection_and_console.py
    lldb/test/API/tools/lldb-dap/launch/io/TestDAP_launch_io_integratedTerminal.py
    lldb/test/API/tools/lldb-dap/locations/TestDAP_locations.py
    lldb/test/API/tools/lldb-dap/memory/TestDAP_memory.py
    lldb/test/API/tools/lldb-dap/module/TestDAP_module.py
    lldb/test/API/tools/lldb-dap/optimized/TestDAP_optimized.py
    lldb/test/API/tools/lldb-dap/output/TestDAP_output.py
    lldb/test/API/tools/lldb-dap/restart/TestDAP_restart_console.py
    lldb/test/API/tools/lldb-dap/runInTerminal/TestDAP_runInTerminal.py
    lldb/test/API/tools/lldb-dap/stackTraceMissingFunctionName/TestDAP_stackTraceMissingFunctionName.py
    lldb/test/API/tools/lldb-dap/stopped-events/TestDAP_stopped_events.py
    lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py
    lldb/test/API/tools/lldb-server/cached-memory-region-info/TestCachedMemoryRegionInfo.py

Removed: 
    


################################################################################
diff  --git a/lldb/test/API/commands/command/nested_alias/TestNestedAlias.py b/lldb/test/API/commands/command/nested_alias/TestNestedAlias.py
index 0919caa7d0056..31670a7780576 100644
--- a/lldb/test/API/commands/command/nested_alias/TestNestedAlias.py
+++ b/lldb/test/API/commands/command/nested_alias/TestNestedAlias.py
@@ -4,6 +4,7 @@
 
 
 import lldb
+from lldbsuite.test.decorators import skipIfWasm
 from lldbsuite.test.lldbtest import *
 import lldbsuite.test.lldbutil as lldbutil
 
@@ -17,6 +18,7 @@ def setUp(self):
         # Find the line number to break inside main().
         self.line = line_number("main.cpp", "// break here")
 
+    @skipIfWasm  # the test reads memory at the address an expression computes
     def test_nested_alias(self):
         """Test that an alias can reference other aliases without crashing."""
         self.build()

diff  --git a/lldb/test/API/commands/frame/recognizer/TestFrameRecognizer.py b/lldb/test/API/commands/frame/recognizer/TestFrameRecognizer.py
index 1f943c634df6d..08f5bc4a4db69 100644
--- a/lldb/test/API/commands/frame/recognizer/TestFrameRecognizer.py
+++ b/lldb/test/API/commands/frame/recognizer/TestFrameRecognizer.py
@@ -14,6 +14,7 @@
 class FrameRecognizerTestCase(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 
+    @skipIfWasm  # the recognizer reads the arguments from $argN, and Wasm has no argument registers
     def test_frame_recognizer_1(self):
         self.build()
         exe = self.getBuildArtifact("a.out")
@@ -162,6 +163,7 @@ def test_frame_recognizer_1(self):
                     substrs=['*a = 78'])
         """
 
+    @skipIfWasm  # the recognizer reads the arguments from $argN, and Wasm has no argument registers
     def test_recognized_args_filtered_by_name(self):
         """Test that 'frame variable <name>' only prints matching recognized args."""
         self.build()

diff  --git a/lldb/test/API/commands/platform/basic/TestPlatformCommand.py b/lldb/test/API/commands/platform/basic/TestPlatformCommand.py
index 03a9c6f7a8eba..19dc5df5bb809 100644
--- a/lldb/test/API/commands/platform/basic/TestPlatformCommand.py
+++ b/lldb/test/API/commands/platform/basic/TestPlatformCommand.py
@@ -8,6 +8,7 @@
 from lldbsuite.test import lldbutil
 
 
+ at skipIfWasm  # a platform command needs a connection to the host it runs on
 class PlatformCommandTestCase(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 

diff  --git a/lldb/test/API/commands/process/launch/TestProcessLaunch.py b/lldb/test/API/commands/process/launch/TestProcessLaunch.py
index 28de5bc0623d0..788a9be55bebd 100644
--- a/lldb/test/API/commands/process/launch/TestProcessLaunch.py
+++ b/lldb/test/API/commands/process/launch/TestProcessLaunch.py
@@ -116,6 +116,7 @@ def test_set_working_dir_nonexisting(self):
         )
 
     @skipIfRemote
+    @skipIfWasm  # WASI gives the inferior no working directory and no file system
     def test_set_working_dir_existing(self):
         """Test that '-w dir' sets the working dir when running the inferior."""
         d = {"CXX_SOURCES": "print_cwd.cpp"}
@@ -210,6 +211,7 @@ def test_environment_with_special_char(self):
         self.assertState(process.GetState(), lldb.eStateExited, PROCESS_EXITED)
 
     @skipIfRemote
+    @skipIfWasm  # WASI gives the inferior no working directory and no file system
     def test_target_launch_working_dir_prop(self):
         """Test that the setting `target.launch-working-dir` is correctly used when launching a process."""
         d = {"CXX_SOURCES": "print_cwd.cpp"}

diff  --git a/lldb/test/API/commands/settings/TestSettings.py b/lldb/test/API/commands/settings/TestSettings.py
index d71c077839666..ec27927f3e529 100644
--- a/lldb/test/API/commands/settings/TestSettings.py
+++ b/lldb/test/API/commands/settings/TestSettings.py
@@ -406,10 +406,12 @@ def test_jit_engine_setting(self):
         self.expect("settings set target.jit-engine bogus", error=True)
 
     @skipIfDarwinEmbedded  # <rdar://problem/34446098> debugserver on ios etc can't write files
+    @skipIfWasm  # WASI gives the inferior no working directory and no file system
     def test_run_args_and_env_vars(self):
         self.do_test_run_args_and_env_vars(use_launchsimple=False)
 
     @skipIfDarwinEmbedded  # <rdar://problem/34446098> debugserver on ios etc can't write files
+    @skipIfWasm  # WASI gives the inferior no working directory and no file system
     def test_launchsimple_args_and_env_vars(self):
         self.do_test_run_args_and_env_vars(use_launchsimple=True)
 
@@ -490,6 +492,7 @@ def do_test_run_args_and_env_vars(self, use_launchsimple):
         )
 
     @skipIfRemote  # it doesn't make sense to send host env to remote target
+    @skipIfWasm  # WASI gives the inferior no working directory and no file system
     def test_pass_host_env_vars(self):
         """Test that the host env vars are passed to the launched process."""
         self.build()
@@ -612,6 +615,7 @@ def unset_env_variables():
         )
 
     @skipIfDarwinEmbedded  # <rdar://problem/34446098> debugserver on ios etc can't write files
+    @skipIfWasm  # WASI gives the inferior no working directory and no file system
     def test_set_error_output_path(self):
         """Test that setting target.error/output-path for the launched process works."""
         self.build()
@@ -666,6 +670,7 @@ def test_set_error_output_path(self):
         )
 
     @skipIfDarwinEmbedded  # <rdar://problem/34446098> debugserver on ios etc can't write files
+    @skipIfWasm  # WASI gives the inferior no working directory and no file system
     def test_same_error_output_path(self):
         """Test that setting target.error and output-path to the same file path for the launched process works."""
         self.build()

diff  --git a/lldb/test/API/commands/settings/quoting/TestQuoting.py b/lldb/test/API/commands/settings/quoting/TestQuoting.py
index 60eeeead4e0a4..ba12ef5ae1552 100644
--- a/lldb/test/API/commands/settings/quoting/TestQuoting.py
+++ b/lldb/test/API/commands/settings/quoting/TestQuoting.py
@@ -8,6 +8,7 @@
 from lldbsuite.test import lldbutil
 
 
+ at skipIfWasm  # WASI gives the inferior no working directory and no file system
 class SettingsCommandTestCase(TestBase):
     output_file_name = "output.txt"
 

diff  --git a/lldb/test/API/commands/statistics/basic/TestStats.py b/lldb/test/API/commands/statistics/basic/TestStats.py
index a32b8feecc5cf..97421a928308c 100644
--- a/lldb/test/API/commands/statistics/basic/TestStats.py
+++ b/lldb/test/API/commands/statistics/basic/TestStats.py
@@ -81,6 +81,7 @@ def get_command_stats(self, debug_stats):
             return debug_stats["commands"]
         return None
 
+    @skipIfWasm  # no expression evaluation
     def test_expressions_frame_var_counts(self):
         self.build()
         lldbutil.run_to_source_breakpoint(

diff  --git a/lldb/test/API/commands/target/basic/TestTargetCommand.py b/lldb/test/API/commands/target/basic/TestTargetCommand.py
index dd6bdb234108a..fcb50effb77fe 100644
--- a/lldb/test/API/commands/target/basic/TestTargetCommand.py
+++ b/lldb/test/API/commands/target/basic/TestTargetCommand.py
@@ -38,6 +38,7 @@ def buildAll(self):
         self.build(dictionary=dc)
         self.addTearDownCleanup(dictionary=dc)
 
+    @skipIfWasm  # a null dereference is a valid read in a Wasm linear memory, so the inferior does not fault
     def test_target_command(self):
         """Test some target commands: create, list, select."""
         self.buildAll()
@@ -563,6 +564,7 @@ def test_target_modules_search_paths_query(self):
     @expectedFailureAll(
         oslist=["freebsd"], bugnumber="github.com/llvm/llvm-project/issues/56079"
     )
+    @skipIfWasm  # a Wasm executable statically links the C library, so its debug info holds many ints
     def test_target_modules_type(self):
         self.buildB()
         self.runCmd("file " + self.getBuildArtifact("b.out"), CURRENT_EXECUTABLE_SET)

diff  --git a/lldb/test/API/driver/quit_speed/TestQuitWithProcess.py b/lldb/test/API/driver/quit_speed/TestQuitWithProcess.py
index 0e0f238fa394b..c5b0142ccb168 100644
--- a/lldb/test/API/driver/quit_speed/TestQuitWithProcess.py
+++ b/lldb/test/API/driver/quit_speed/TestQuitWithProcess.py
@@ -35,6 +35,7 @@ def test_run_quit(self):
         child.expect(pexpect.EOF, timeout=30)
 
     @skipIfAsan
+    @skipIfWasm  # quitting detaches from the runtime, so there is nothing to confirm
     def test_run_quit_with_prompt(self):
         """Test that the lldb driver's batch mode works correctly with trailing space in confimation."""
         import pexpect

diff  --git a/lldb/test/API/functionalities/breakpoint/breakpoint_locations/after_rebuild/TestLocationsAfterRebuild.py b/lldb/test/API/functionalities/breakpoint/breakpoint_locations/after_rebuild/TestLocationsAfterRebuild.py
index b0d00d49d4839..6e1c9452a6833 100644
--- a/lldb/test/API/functionalities/breakpoint/breakpoint_locations/after_rebuild/TestLocationsAfterRebuild.py
+++ b/lldb/test/API/functionalities/breakpoint/breakpoint_locations/after_rebuild/TestLocationsAfterRebuild.py
@@ -7,7 +7,7 @@
 import lldb
 import lldbsuite.test.lldbutil as lldbutil
 from lldbsuite.test.lldbtest import *
-from lldbsuite.test.decorators import skipIfWindows
+from lldbsuite.test.decorators import skipIfWasm, skipIfWindows
 import os
 
 
@@ -20,6 +20,7 @@ class TestLocationsAfterRebuild(TestBase):
 
     # On Windows we cannot remove a file that lldb is debugging.
     @skipIfWindows
+    @skipIfWasm  # a WASI executable wraps main, so a breakpoint on it takes two locations
     def test_remaining_location_spec(self):
         """If we rebuild a couple of times some of the old locations
         get removed.  Make sure the command-line breakpoint id

diff  --git a/lldb/test/API/functionalities/breakpoint/thread_plan_user_breakpoint/TestThreadPlanUserBreakpoint.py b/lldb/test/API/functionalities/breakpoint/thread_plan_user_breakpoint/TestThreadPlanUserBreakpoint.py
index 3f367f6e183f9..1cae52a0f74b1 100644
--- a/lldb/test/API/functionalities/breakpoint/thread_plan_user_breakpoint/TestThreadPlanUserBreakpoint.py
+++ b/lldb/test/API/functionalities/breakpoint/thread_plan_user_breakpoint/TestThreadPlanUserBreakpoint.py
@@ -102,6 +102,7 @@ def set_up_breakpoints_callback(self, condition, bp):
         # Set breakpoint callback to return True/False
         bp.SetScriptCallbackBody("return %s" % condition)
 
+    @skipIfWasm  # a step on Wasm ends at the breakpoint's address without hitting it
     def test_thread_plan_user_breakpoint_conditional_active(self):
         # Test with breakpoints having true condition
         self.check_thread_plan_user_breakpoint(
@@ -114,6 +115,7 @@ def test_thread_plan_user_breakpoint_conditional_inactive(self):
             condition=False, set_up_breakpoint_func=self.set_up_breakpoints_condition
         )
 
+    @skipIfWasm  # a step on Wasm ends at the breakpoint's address without hitting it
     def test_thread_plan_user_breakpoint_unconditional_active(self):
         # Test with breakpoints enabled unconditionally
         self.check_thread_plan_user_breakpoint(
@@ -126,6 +128,7 @@ def test_thread_plan_user_breakpoint_unconditional_inactive(self):
             condition=False, set_up_breakpoint_func=self.set_up_breakpoints_enable
         )
 
+    @skipIfWasm  # a step on Wasm ends at the breakpoint's address without hitting it
     def test_thread_plan_user_breakpoint_callback_active(self):
         # Test with breakpoints with callback that returns 'True'
         self.check_thread_plan_user_breakpoint(

diff  --git a/lldb/test/API/functionalities/bt-interrupt/TestInterruptBacktrace.py b/lldb/test/API/functionalities/bt-interrupt/TestInterruptBacktrace.py
index dc99538a742f8..e0be461548fd6 100644
--- a/lldb/test/API/functionalities/bt-interrupt/TestInterruptBacktrace.py
+++ b/lldb/test/API/functionalities/bt-interrupt/TestInterruptBacktrace.py
@@ -14,6 +14,7 @@ class TestInterruptingBacktrace(TestBase):
 
     @expectedFailureAll(oslist=["windows"], archs=["aarch64"])
     @skipIf(oslist=["linux"], archs=["arm$"])
+    @skipIfWasm  # the runtime ends the process on a stack exhaustion trap without stopping
     def test_backtrace_interrupt(self):
         """Use RequestInterrupt followed by stack operations
         to ensure correct interrupt behavior for stacks."""

diff  --git a/lldb/test/API/functionalities/expr-result-var/TestCPPExprResult.py b/lldb/test/API/functionalities/expr-result-var/TestCPPExprResult.py
index 7bd4bb582a4a3..63a53605aea2b 100644
--- a/lldb/test/API/functionalities/expr-result-var/TestCPPExprResult.py
+++ b/lldb/test/API/functionalities/expr-result-var/TestCPPExprResult.py
@@ -10,6 +10,7 @@
 from lldbsuite.test import lldbutil
 
 
+ at skipIfWasm  # no expression evaluation
 class TestCPPResultVariables(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
     SHARED_BUILD_TESTCASE = False

diff  --git a/lldb/test/API/functionalities/inferior-assert/TestInferiorAssert.py b/lldb/test/API/functionalities/inferior-assert/TestInferiorAssert.py
index 6bbf906fdde72..835358f068509 100644
--- a/lldb/test/API/functionalities/inferior-assert/TestInferiorAssert.py
+++ b/lldb/test/API/functionalities/inferior-assert/TestInferiorAssert.py
@@ -7,6 +7,7 @@
 from lldbsuite.test.lldbtest import *
 
 
+ at skipIfWasm  # assert() ends a WASI process, there is no signal to stop on
 class AssertingInferiorTestCase(TestBase):
     @expectedFailureAll(
         oslist=["windows"],

diff  --git a/lldb/test/API/functionalities/multiple-slides/TestMultipleSlides.py b/lldb/test/API/functionalities/multiple-slides/TestMultipleSlides.py
index 5fd2b767a6237..abb83cd6235d0 100644
--- a/lldb/test/API/functionalities/multiple-slides/TestMultipleSlides.py
+++ b/lldb/test/API/functionalities/multiple-slides/TestMultipleSlides.py
@@ -12,6 +12,7 @@
 class MultipleSlidesTestCase(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 
+    @skipIfWasm  # a Wasm section sits at a fixed address in its address space, so it cannot be slid
     def test_mulitple_slides(self):
         """Test that a binary can be slid multiple times correctly."""
         self.build()

diff  --git a/lldb/test/API/functionalities/scripted_frame_provider/runlock_reentrant_deadlock/TestRunLockReentrantDeadlock.py b/lldb/test/API/functionalities/scripted_frame_provider/runlock_reentrant_deadlock/TestRunLockReentrantDeadlock.py
index b4dfdf779b390..36fa32c5679a6 100644
--- a/lldb/test/API/functionalities/scripted_frame_provider/runlock_reentrant_deadlock/TestRunLockReentrantDeadlock.py
+++ b/lldb/test/API/functionalities/scripted_frame_provider/runlock_reentrant_deadlock/TestRunLockReentrantDeadlock.py
@@ -33,6 +33,7 @@ class TestRunLockReentrantDeadlock(TestBase):
         bugnumber="llvm.org/pr24528 (scripted breakpoint resolvers fail on "
         "Windows; same XFAIL as the sibling tests in this directory)",
     )
+    @skipIfWasm  # the was_hit callback increments the value with an expression
     def test_runlock_reentrant_no_deadlock(self):
         """
         Test that a frame provider calling SBFrame.IsValid from

diff  --git a/lldb/test/API/functionalities/scripted_frame_provider/was_hit_deadlock/TestWasHitWithFrameProviderDeadlock.py b/lldb/test/API/functionalities/scripted_frame_provider/was_hit_deadlock/TestWasHitWithFrameProviderDeadlock.py
index febbef49de9e7..c673d29f7009d 100644
--- a/lldb/test/API/functionalities/scripted_frame_provider/was_hit_deadlock/TestWasHitWithFrameProviderDeadlock.py
+++ b/lldb/test/API/functionalities/scripted_frame_provider/was_hit_deadlock/TestWasHitWithFrameProviderDeadlock.py
@@ -31,6 +31,7 @@ class TestWasHitWithFrameProviderDeadlock(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24528")
+    @skipIfWasm  # the was_hit callback increments the value with an expression
     def test_was_hit_with_frame_provider_no_deadlock(self):
         """
         Test that a scripted breakpoint doing EvaluateExpression in was_hit

diff  --git a/lldb/test/API/functionalities/statusline/TestStatusline.py b/lldb/test/API/functionalities/statusline/TestStatusline.py
index 75792c009cc39..a035b5e20cd56 100644
--- a/lldb/test/API/functionalities/statusline/TestStatusline.py
+++ b/lldb/test/API/functionalities/statusline/TestStatusline.py
@@ -279,6 +279,7 @@ def test_target_symbols_add(self):
     @skipIfDarwin
     @skipIfLinux  # https://github.com/llvm/llvm-project/issues/154763
     @add_test_categories(["lldb-server"])
+    @skipIfWasm  # the test drives a native debug server for the program
     def test_modulelist_deadlock(self):
         """Regression test for a deadlock that occurs when the status line is enabled before connecting
         to a gdb-remote server.

diff  --git a/lldb/test/API/functionalities/thread/jump/TestThreadJump.py b/lldb/test/API/functionalities/thread/jump/TestThreadJump.py
index 42c4fcf5523ce..6ad2266a64c2f 100644
--- a/lldb/test/API/functionalities/thread/jump/TestThreadJump.py
+++ b/lldb/test/API/functionalities/thread/jump/TestThreadJump.py
@@ -9,6 +9,7 @@
 from lldbsuite.test import lldbutil
 
 
+ at skipIfWasm  # Wasm has no writable PC to jump
 class ThreadJumpTestCase(TestBase):
     def setUp(self):
         TestBase.setUp(self)

diff  --git a/lldb/test/API/lang/c/const_variables/TestConstVariables.py b/lldb/test/API/lang/c/const_variables/TestConstVariables.py
index 70d0825cf7330..45f213f96eb1c 100644
--- a/lldb/test/API/lang/c/const_variables/TestConstVariables.py
+++ b/lldb/test/API/lang/c/const_variables/TestConstVariables.py
@@ -7,6 +7,7 @@
 from lldbsuite.test import lldbutil
 
 
+ at skipIfWasm  # no expression evaluation
 class ConstVariableTestCase(TestBase):
     @expectedFailureAll(oslist=["freebsd", "linux"], compiler="icc")
     @expectedFailureAll(archs=["mips", "mipsel", "mips64", "mips64el"])

diff  --git a/lldb/test/API/lang/c/inlines/TestRedefinitionsInInlines.py b/lldb/test/API/lang/c/inlines/TestRedefinitionsInInlines.py
index 062fd88f7d272..0deeeba56254e 100644
--- a/lldb/test/API/lang/c/inlines/TestRedefinitionsInInlines.py
+++ b/lldb/test/API/lang/c/inlines/TestRedefinitionsInInlines.py
@@ -9,6 +9,7 @@
 class TestRedefinitionsInInlines(TestBase):
     # https://github.com/llvm/llvm-project/issues/28219
     @skipIf(compiler="clang", compiler_version=["<", "3.5"])
+    @skipIfWasm  # no expression evaluation
     def test(self):
         self.source = "main.c"
         self.build()

diff  --git a/lldb/test/API/lang/c/set_values/TestSetValues.py b/lldb/test/API/lang/c/set_values/TestSetValues.py
index e0813734403a0..822bbd68dc92c 100644
--- a/lldb/test/API/lang/c/set_values/TestSetValues.py
+++ b/lldb/test/API/lang/c/set_values/TestSetValues.py
@@ -7,6 +7,7 @@
 from lldbsuite.test import lldbutil
 
 
+ at skipIfWasm  # no expression evaluation
 class SetValuesTestCase(TestBase):
     def setUp(self):
         # Call super's setUp().

diff  --git a/lldb/test/API/lang/c/stepping/TestStepAndBreakpoints.py b/lldb/test/API/lang/c/stepping/TestStepAndBreakpoints.py
index 9fe787bcaa9fb..3e4cb376ad704 100644
--- a/lldb/test/API/lang/c/stepping/TestStepAndBreakpoints.py
+++ b/lldb/test/API/lang/c/stepping/TestStepAndBreakpoints.py
@@ -19,6 +19,7 @@ def setUp(self):
     @expectedFailureAll(oslist=["linux"], archs=no_match(["i386", "x86_64"]))
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24777")
     @expectedFailureNetBSD
+    @skipIfWasm  # no expression evaluation
     def test_and_python_api(self):
         """Test stepping over vrs. hitting breakpoints & subsequent stepping in various forms."""
         self.build()

diff  --git a/lldb/test/API/lang/cpp/dynamic-value/TestDynamicValue.py b/lldb/test/API/lang/cpp/dynamic-value/TestDynamicValue.py
index efbbb8a6d3c1e..2c667c866d914 100644
--- a/lldb/test/API/lang/cpp/dynamic-value/TestDynamicValue.py
+++ b/lldb/test/API/lang/cpp/dynamic-value/TestDynamicValue.py
@@ -284,6 +284,7 @@ def test_from_forward_decl(self):
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24663")
     @expectedFailureAll(archs=["arm$"])  # Minidump saving not implemented
     @skipIf(archs=["arm64e"])  # arm64e incompatible with minidump
+    @skipIfWasm  # No core file format for Wasm
     def test_from_core_file(self):
         """Test fetching C++ dynamic values from core files. Specifically, test
         that we can determine the dynamic type of the value if the core file

diff  --git a/lldb/test/API/lang/cpp/extern_c/TestExternCSymbols.py b/lldb/test/API/lang/cpp/extern_c/TestExternCSymbols.py
index c8308c16011e0..8c757524d1531 100644
--- a/lldb/test/API/lang/cpp/extern_c/TestExternCSymbols.py
+++ b/lldb/test/API/lang/cpp/extern_c/TestExternCSymbols.py
@@ -1,4 +1,6 @@
 from lldbsuite.test import lldbinline
 from lldbsuite.test import decorators
 
-lldbinline.MakeInlineTest(__file__, globals())
+lldbinline.MakeInlineTest(
+    __file__, globals(), decorators=[decorators.skipIfWasm]  # no expression evaluation
+)

diff  --git a/lldb/test/API/lang/cpp/function-local-class/TestCppFunctionLocalClass.py b/lldb/test/API/lang/cpp/function-local-class/TestCppFunctionLocalClass.py
index ab81411a9f230..5cd9f37e3d92d 100644
--- a/lldb/test/API/lang/cpp/function-local-class/TestCppFunctionLocalClass.py
+++ b/lldb/test/API/lang/cpp/function-local-class/TestCppFunctionLocalClass.py
@@ -4,6 +4,7 @@
 from lldbsuite.test import lldbutil
 
 
+ at skipIfWasm  # no expression evaluation
 class TestCase(TestBase):
     @no_debug_info_test
     def test(self):

diff  --git a/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py b/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py
index 0a757d3368a44..4dd39148c89d3 100644
--- a/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py
+++ b/lldb/test/API/lang/cpp/template-arguments/TestCppTemplateArguments.py
@@ -8,6 +8,7 @@
 class TestCase(TestBase):
     @no_debug_info_test
     @skipIf(compiler="clang", compiler_version=["<", "20.0"])
+    @skipIfWasm  # wasm32 supports neither _Float16 nor __bf16
     def test(self):
         self.build()
         target = self.dbg.CreateTarget(self.getBuildArtifact("a.out"))

diff  --git a/lldb/test/API/lang/cpp/template/TestTemplateArgs.py b/lldb/test/API/lang/cpp/template/TestTemplateArgs.py
index c32413873d1ca..ae2e8b352a7bd 100644
--- a/lldb/test/API/lang/cpp/template/TestTemplateArgs.py
+++ b/lldb/test/API/lang/cpp/template/TestTemplateArgs.py
@@ -11,6 +11,7 @@
 from lldbsuite.test import lldbutil
 
 
+ at skipIfWasm  # no expression evaluation
 class TemplateArgsTestCase(TestBase):
     SHARED_BUILD_TESTCASE = False
     def prepareProcess(self):

diff  --git a/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py b/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py
index 4a2b312321566..f4567130c6452 100644
--- a/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py
+++ b/lldb/test/API/python_api/find_in_memory/TestFindInMemory.py
@@ -3,6 +3,7 @@
 """
 
 import lldb
+from lldbsuite.test.decorators import *
 from lldbsuite.test.lldbtest import *
 from lldbsuite.test import lldbutil
 from address_ranges_helper import *
@@ -27,6 +28,7 @@ def setUp(self):
         )
         self.assertTrue(self.bp.IsValid())
 
+    @skipIfWasm  # Wasm exposes no stack pointer register
     def test_check_stack_pointer(self):
         """Make sure the 'stack_pointer' variable lives on the stack"""
         self.assertTrue(self.process, PROCESS_IS_VALID)

diff  --git a/lldb/test/API/python_api/find_in_memory/TestFindRangesInMemory.py b/lldb/test/API/python_api/find_in_memory/TestFindRangesInMemory.py
index 895c527430f21..b34f4313ff990 100644
--- a/lldb/test/API/python_api/find_in_memory/TestFindRangesInMemory.py
+++ b/lldb/test/API/python_api/find_in_memory/TestFindRangesInMemory.py
@@ -3,6 +3,7 @@
 """
 
 import lldb
+from lldbsuite.test.decorators import *
 from lldbsuite.test.lldbtest import *
 from lldbsuite.test import lldbutil
 from address_ranges_helper import *
@@ -43,6 +44,7 @@ def test_find_ranges_in_memory_two_matches(self):
         self.assertSuccess(error)
         self.assertEqual(matches.GetSize(), 2)
 
+    @skipIfWasm  # Wasm linear memory is one region, which holds more than the stack
     def test_find_ranges_in_memory_one_match(self):
         """Make sure exactly one match exists in the heap memory and the right address ranges are provided"""
         self.assertTrue(self.process, PROCESS_IS_VALID)
@@ -61,6 +63,7 @@ def test_find_ranges_in_memory_one_match(self):
         self.assertSuccess(error)
         self.assertEqual(matches.GetSize(), 1)
 
+    @skipIfWasm  # Wasm linear memory is one region, which holds more than the stack
     def test_find_ranges_in_memory_one_match_multiple_ranges(self):
         """Make sure exactly one match exists in the heap memory and multiple address ranges are provided"""
         self.assertTrue(self.process, PROCESS_IS_VALID)

diff  --git a/lldb/test/API/python_api/frame/TestFrames.py b/lldb/test/API/python_api/frame/TestFrames.py
index 0ec12206024ab..93ef40b49cda9 100644
--- a/lldb/test/API/python_api/frame/TestFrames.py
+++ b/lldb/test/API/python_api/frame/TestFrames.py
@@ -12,6 +12,7 @@
 
 
 class FrameAPITestCase(TestBase):
+    @skipIfWasm  # Wasm exposes no register sets, so there is no pc or sp register to read
     def test_get_arg_vals_for_call_stack(self):
         """Exercise SBFrame.GetVariables() API to get argument vals."""
         self.build()

diff  --git a/lldb/test/API/python_api/persistent_decls/TestPersistentDecls.py b/lldb/test/API/python_api/persistent_decls/TestPersistentDecls.py
index 7036bbe521dae..12c64871f03bb 100644
--- a/lldb/test/API/python_api/persistent_decls/TestPersistentDecls.py
+++ b/lldb/test/API/python_api/persistent_decls/TestPersistentDecls.py
@@ -6,9 +6,11 @@
 
 import lldb
 import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.decorators import skipIfWasm
 from lldbsuite.test.lldbtest import *
 
 
+ at skipIfWasm  # no expression evaluation
 class TestPersistentDecls(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 

diff  --git a/lldb/test/API/python_api/process/TestProcessAPI.py b/lldb/test/API/python_api/process/TestProcessAPI.py
index 6fb1c9247b291..2cb3c9c314989 100644
--- a/lldb/test/API/python_api/process/TestProcessAPI.py
+++ b/lldb/test/API/python_api/process/TestProcessAPI.py
@@ -374,6 +374,7 @@ def test_get_num_supported_hardware_watchpoints(self):
 
     @no_debug_info_test
     @skipIfRemote
+    @skipIfWasm  # the Wasm platform cannot look a process up by its id
     def test_get_process_info(self):
         """Test SBProcess::GetProcessInfo() API with a locally launched process."""
         self.build()
@@ -463,6 +464,7 @@ def test_get_process_info(self):
         process_info.GetParentProcessID()
 
     @expectedFailureWindows  # Not yet implemented.
+    @skipIfWasm  # the Wasm platform cannot look a process up by its id
     def test_get_process_info_arguments(self):
         """Test SBProcessInfo Arguments returns the correct values."""
         self.build()
@@ -495,6 +497,7 @@ def test_get_process_info_arguments(self):
         self.assertEqual(process_info.GetArgumentAtIndex(3), "מזל טוב")
         self.assertEqual(process_info.GetArgumentAtIndex(4), None)
 
+    @skipIfWasm  # the test reads the allocation back with an expression
     def test_allocate_deallocate_memory(self):
         """Test Python SBProcess.AllocateMemory() and SBProcess.DeallocateMemory() APIs."""
         self.build()

diff  --git a/lldb/test/API/python_api/process/cancel_attach/TestCancelAttach.py b/lldb/test/API/python_api/process/cancel_attach/TestCancelAttach.py
index 7bb3bda7bef89..46c0f93a89309 100644
--- a/lldb/test/API/python_api/process/cancel_attach/TestCancelAttach.py
+++ b/lldb/test/API/python_api/process/cancel_attach/TestCancelAttach.py
@@ -15,6 +15,7 @@ class AttachCancelTestCase(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 
     @skipIfRemote
+    @skipIfWasm  # the Wasm platform cannot attach to a process by name
     @skipIf(
         hostoslist=["windows", "linux"],
         bugnumber="https://github.com/llvm/llvm-project/issues/115618",

diff  --git a/lldb/test/API/python_api/target/TestTargetAPI.py b/lldb/test/API/python_api/target/TestTargetAPI.py
index a6ab745e0b3b9..26fe3370d8613 100644
--- a/lldb/test/API/python_api/target/TestTargetAPI.py
+++ b/lldb/test/API/python_api/target/TestTargetAPI.py
@@ -111,6 +111,7 @@ def test_get_arch_name(self):
             "Arch name is equal to the first item of the triple",
         )
 
+    @skipIfWasm  # there is no ABI plugin for Wasm to name
     def test_get_ABIName(self):
         d = {"EXE": "b.out"}
         self.build(dictionary=d)
@@ -134,6 +135,7 @@ def test_get_ABIName(self):
             abi_pre_launch, abi_after_launch, "ABI's match before and during run"
         )
 
+    @skipIfWasm  # zero is a valid address in a Wasm linear memory, so a read of it succeeds
     def test_read_memory(self):
         d = {"EXE": "b.out"}
         self.build(dictionary=d)
@@ -498,6 +500,7 @@ def resolve_symbol_context_with_address(self):
         )
 
     @skipIfRemote
+    @skipIfWasm  # the default architecture is the host's, which no Wasm module matches
     def test_default_arch(self):
         """Test the other two target create methods using LLDB_ARCH_DEFAULT."""
         self.build()

diff  --git a/lldb/test/API/python_api/thread/TestThreadAPI.py b/lldb/test/API/python_api/thread/TestThreadAPI.py
index 6d87e1810106c..0a6a1d01418cc 100644
--- a/lldb/test/API/python_api/thread/TestThreadAPI.py
+++ b/lldb/test/API/python_api/thread/TestThreadAPI.py
@@ -54,6 +54,7 @@ def test_negative_indexing(self):
         self.build()
         self.validate_negative_indexing()
  
+    @skipIfWasm  # the test calls a function with an expression
     def test_StepInstruction(self):
         """Test that StepInstruction preserves the plan stack."""
         self.build()

diff  --git a/lldb/test/API/python_api/value/change_ptr/TestChangePtr.py b/lldb/test/API/python_api/value/change_ptr/TestChangePtr.py
index f68eeb8404d70..92c0e06c229c0 100644
--- a/lldb/test/API/python_api/value/change_ptr/TestChangePtr.py
+++ b/lldb/test/API/python_api/value/change_ptr/TestChangePtr.py
@@ -5,6 +5,7 @@
 
 
 class ChangePtrTest(TestBase):
+    @skipIfWasm  # the test checks the address of a persistent expression result
     def test(self):
         self.build()
 

diff  --git a/lldb/test/API/python_api/value/change_values/TestChangeValueAPI.py b/lldb/test/API/python_api/value/change_values/TestChangeValueAPI.py
index d3c8935e2978d..3b5365c2169e3 100644
--- a/lldb/test/API/python_api/value/change_values/TestChangeValueAPI.py
+++ b/lldb/test/API/python_api/value/change_values/TestChangeValueAPI.py
@@ -23,6 +23,7 @@ def setUp(self):
 
     @expectedFlakeyLinux("llvm.org/pr25652")
     @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24772")
+    @skipIfWasm  # Wasm exposes no stack pointer register
     def test_change_value(self):
         """Exercise the SBValue::SetValueFromCString API."""
         d = {"EXE": self.exe_name}

diff  --git a/lldb/test/API/tools/lldb-dap/attach-commands/TestDAP_attachCommands.py b/lldb/test/API/tools/lldb-dap/attach-commands/TestDAP_attachCommands.py
index 0cfbb30f02c31..97ee08c6fab14 100644
--- a/lldb/test/API/tools/lldb-dap/attach-commands/TestDAP_attachCommands.py
+++ b/lldb/test/API/tools/lldb-dap/attach-commands/TestDAP_attachCommands.py
@@ -2,13 +2,14 @@
 Test lldb-dap attach commands
 """
 
-from lldbsuite.test.decorators import skipIfNetBSD
+from lldbsuite.test.decorators import skipIfNetBSD, skipIfWasm
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 from lldbsuite.test.tools.lldb_dap.types import AttachArgs, PauseArgs
 
 
 class TestDAP_attachCommands(DAPTestCaseBase):
     @skipIfNetBSD  # Hangs on NetBSD as well
+    @skipIfWasm  # the test releases the inferior with an expression
     def test_commands(self):
         """
         Tests the "initCommands", "preRunCommands", "stopCommands",

diff  --git a/lldb/test/API/tools/lldb-dap/attach/TestDAP_attachByPortNum.py b/lldb/test/API/tools/lldb-dap/attach/TestDAP_attachByPortNum.py
index fe4f240c404e2..22129996ddd3e 100644
--- a/lldb/test/API/tools/lldb-dap/attach/TestDAP_attachByPortNum.py
+++ b/lldb/test/API/tools/lldb-dap/attach/TestDAP_attachByPortNum.py
@@ -6,7 +6,7 @@
 
 from lldbgdbserverutils import Pipe
 from lldbsuite.test import lldbplatformutil
-from lldbsuite.test.decorators import skipIfNetBSD, skipIfWindows
+from lldbsuite.test.decorators import skipIfNetBSD, skipIfWasm, skipIfWindows
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 from lldbsuite.test.tools.lldb_dap.types import AttachArgs
@@ -26,6 +26,7 @@ def debug_server_start_args() -> List[str]:
     return args
 
 
+ at skipIfWasm  # the test drives a native debug server for the program
 class TestDAP_attachByPortNum(DAPTestCaseBase):
     SHARED_BUILD_TESTCASE = False
 

diff  --git a/lldb/test/API/tools/lldb-dap/console/TestDAP_console.py b/lldb/test/API/tools/lldb-dap/console/TestDAP_console.py
index 11e8cf5e8f692..de175b4b5134a 100644
--- a/lldb/test/API/tools/lldb-dap/console/TestDAP_console.py
+++ b/lldb/test/API/tools/lldb-dap/console/TestDAP_console.py
@@ -6,7 +6,7 @@
 import os
 import unittest
 
-from lldbsuite.test.decorators import skipIfWindows
+from lldbsuite.test.decorators import skipIfWasm, skipIfWindows
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap.types import LaunchArgs
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase, DAPTestSession
@@ -115,6 +115,7 @@ def test_empty_escape_prefix(self):
 
     @skipIfWindows
     @skipUnlessPsutil
+    @skipIfWasm  # the test signals the debug server, which for Wasm is the runtime
     def test_exit_status_message_sigterm(self):
         import psutil
 

diff  --git a/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py b/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py
index 6cb183b3c6ef6..b139593c0cb9e 100644
--- a/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py
+++ b/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py
@@ -5,13 +5,14 @@
 import re
 from typing import Optional, Union
 
-from lldbsuite.test.decorators import skipIfWindows
+from lldbsuite.test.decorators import skipIfWasm, skipIfWindows
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 from lldbsuite.test.tools.lldb_dap.session_helpers import ExpectEval, FrameContext
 from lldbsuite.test.tools.lldb_dap.types import EvaluateContext, LaunchArgs, ValueFormat
 
 
+ at skipIfWasm  # no expression evaluation
 class TestDAP_evaluate(DAPTestCaseBase):
     # The frame that `assert_eval*` functions calls evaluate in.
     _eval_frame: Optional[FrameContext] = None

diff  --git a/lldb/test/API/tools/lldb-dap/invalidated-event/TestDAP_invalidatedEvent.py b/lldb/test/API/tools/lldb-dap/invalidated-event/TestDAP_invalidatedEvent.py
index 9fc03f145813c..301873116caaf 100644
--- a/lldb/test/API/tools/lldb-dap/invalidated-event/TestDAP_invalidatedEvent.py
+++ b/lldb/test/API/tools/lldb-dap/invalidated-event/TestDAP_invalidatedEvent.py
@@ -4,12 +4,14 @@
 know about it.
 """
 
+from lldbsuite.test.decorators import skipIfWasm
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 from lldbsuite.test.tools.lldb_dap.types import LaunchArgs
 
 
 class TestDAP_invalidatedEvent(DAPTestCaseBase):
+    @skipIfWasm  # No ABI plugin for Wasm to set a return value with
     def test_invalidated_stack_area_event(self):
         """
         Test an invalidated event for the stack area.

diff  --git a/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_cwd.py b/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_cwd.py
index 21fac2b785b88..5dba839ae040a 100644
--- a/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_cwd.py
+++ b/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_cwd.py
@@ -4,10 +4,12 @@
 
 import os
 
+from lldbsuite.test.decorators import skipIfWasm
 from lldbsuite.test.tools.lldb_dap.types import LaunchArgs
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 
 
+ at skipIfWasm  # WASI gives the inferior no working directory and no file system
 class TestDAP_launch_cwd(DAPTestCaseBase):
     """
     Tests the default launch of a simple program with a current working

diff  --git a/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_shellExpandArguments_enabled.py b/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_shellExpandArguments_enabled.py
index b716c3fd24c00..0c5fc58b7ba79 100644
--- a/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_shellExpandArguments_enabled.py
+++ b/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_shellExpandArguments_enabled.py
@@ -4,11 +4,12 @@
 
 import os
 
-from lldbsuite.test.decorators import expectedFailureAll, skipIfLinux
+from lldbsuite.test.decorators import expectedFailureAll, skipIfLinux, skipIfWasm
 from lldbsuite.test.tools.lldb_dap.types import LaunchArgs
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 
 
+ at skipIfWasm  # a Wasm runtime is handed its arguments directly, with no shell to expand them
 class TestDAP_launch_shellExpandArguments_enabled(DAPTestCaseBase):
     """
     Tests the default launch of a simple program with shell expansion

diff  --git a/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_stdio_redirection_and_console.py b/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_stdio_redirection_and_console.py
index 505f033d0ef30..477bd74aee514 100644
--- a/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_stdio_redirection_and_console.py
+++ b/lldb/test/API/tools/lldb-dap/launch/TestDAP_launch_stdio_redirection_and_console.py
@@ -9,6 +9,7 @@
     skipIf,
     skipIfAsan,
     skipIfBuildType,
+    skipIfWasm,
     skipIfWindows,
 )
 from lldbsuite.test.tools.lldb_dap.types import Console, LaunchArgs
@@ -21,6 +22,7 @@ class TestDAP_launch_stdio_redirection_and_console(DAPTestCaseBase):
     """
 
     @skipIfAsan
+    @skipIfWasm  # runInTerminal has the client run the program, and a Wasm module is not executable
     @skipIfWindows  # https://github.com/llvm/llvm-project/issues/198763
     @skipIf(oslist=["linux"], archs=no_match(["x86_64"]))
     @skipIfBuildType(["debug"])

diff  --git a/lldb/test/API/tools/lldb-dap/launch/io/TestDAP_launch_io_integratedTerminal.py b/lldb/test/API/tools/lldb-dap/launch/io/TestDAP_launch_io_integratedTerminal.py
index bf127d8f2d168..9895b83d89d19 100644
--- a/lldb/test/API/tools/lldb-dap/launch/io/TestDAP_launch_io_integratedTerminal.py
+++ b/lldb/test/API/tools/lldb-dap/launch/io/TestDAP_launch_io_integratedTerminal.py
@@ -7,6 +7,7 @@
     skipIfAsan,
     skipIfBuildType,
     skipIfRemote,
+    skipIfWasm,
     skipIfWindows,
 )
 from lldbsuite.test.tools.lldb_dap import DAPTestSession
@@ -17,6 +18,7 @@
 @skipIfAsan
 @skipIfBuildType(["debug"])
 @skipIfWindows
+ at skipIfWasm  # runInTerminal has the client run the program, and a Wasm module is not executable
 class TestDAP_launch_io_IntegratedTerminal(DAP_launchIO):
     console = Console.INTEGRATED_TERMINAL
 

diff  --git a/lldb/test/API/tools/lldb-dap/locations/TestDAP_locations.py b/lldb/test/API/tools/lldb-dap/locations/TestDAP_locations.py
index d2c921fbf39a8..98948714bf08e 100644
--- a/lldb/test/API/tools/lldb-dap/locations/TestDAP_locations.py
+++ b/lldb/test/API/tools/lldb-dap/locations/TestDAP_locations.py
@@ -2,7 +2,7 @@
 Test lldb-dap locations request
 """
 
-from lldbsuite.test.decorators import skipIf, skipIfWindows
+from lldbsuite.test.decorators import skipIf, skipIfWasm, skipIfWindows
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 from lldbsuite.test.tools.lldb_dap.types import LaunchArgs
@@ -14,6 +14,7 @@ class TestDAP_locations(DAPTestCaseBase):
     @skipIf(
         bugnumber="https://github.com/llvm/llvm-project/issues/203127", archs=["arm64e"]
     )
+    @skipIfWasm  # a Wasm function pointer is a table index, not a code address
     def test_locations(self):
         """
         Tests the 'locations' request.

diff  --git a/lldb/test/API/tools/lldb-dap/memory/TestDAP_memory.py b/lldb/test/API/tools/lldb-dap/memory/TestDAP_memory.py
index 7c9ad0c0f75ee..7c32ae4fb8c38 100644
--- a/lldb/test/API/tools/lldb-dap/memory/TestDAP_memory.py
+++ b/lldb/test/API/tools/lldb-dap/memory/TestDAP_memory.py
@@ -76,6 +76,7 @@ def test_memory_refs_set_variable(self):
         )
 
     @skipIfWindows
+    @skipIfWasm  # the test finds the memory to read by evaluating an expression
     def test_readMemory(self):
         """
         Tests the 'readMemory' request
@@ -126,6 +127,7 @@ def test_readMemory(self):
 
     # Flakey on 32-bit Arm Linux.
     @skipIf(oslist=["linux"], archs=["arm$"])
+    @skipIfWasm  # the test finds the memory to write by evaluating an expression
     def test_writeMemory(self):
         """
         Tests the 'writeMemory' request

diff  --git a/lldb/test/API/tools/lldb-dap/module/TestDAP_module.py b/lldb/test/API/tools/lldb-dap/module/TestDAP_module.py
index 8e2a7bf001b93..fc9d1f2f9a20d 100644
--- a/lldb/test/API/tools/lldb-dap/module/TestDAP_module.py
+++ b/lldb/test/API/tools/lldb-dap/module/TestDAP_module.py
@@ -5,7 +5,11 @@
 import platform
 import re
 
-from lldbsuite.test.decorators import skipIfWindows, skipUnlessDarwin
+from lldbsuite.test.decorators import (
+    skipIfTargetDoesNotSupportSharedLibraries,
+    skipIfWindows,
+    skipUnlessDarwin,
+)
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap.types import (
     CompileUnitsArgs,
@@ -16,6 +20,7 @@
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 
 
+ at skipIfTargetDoesNotSupportSharedLibraries()
 class TestDAP_module(DAPTestCaseBase):
     def run_test(self, symbol_basename: str, expect_debug_info_size: bool):
         session = self.build_and_create_session()

diff  --git a/lldb/test/API/tools/lldb-dap/optimized/TestDAP_optimized.py b/lldb/test/API/tools/lldb-dap/optimized/TestDAP_optimized.py
index d76cc14e64c10..efaeb9bbbc677 100644
--- a/lldb/test/API/tools/lldb-dap/optimized/TestDAP_optimized.py
+++ b/lldb/test/API/tools/lldb-dap/optimized/TestDAP_optimized.py
@@ -2,7 +2,7 @@
 Test lldb-dap variables/stackTrace request for optimized code
 """
 
-from lldbsuite.test.decorators import skipIfAsan, skipIfWindows
+from lldbsuite.test.decorators import skipIfAsan, skipIfWasm, skipIfWindows
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap.types import LaunchArgs
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
@@ -32,6 +32,7 @@ def test_stack_frame_name(self):
 
     @skipIfAsan  # On ASAN builds this test intermittently fails https://github.com/llvm/llvm-project/issues/111061
     @skipIfWindows
+    @skipIfWasm  # an optimized out variable keeps a reused local, so reading it succeeds
     def test_optimized_variable(self):
         """Test optimized variable value contains error."""
         program = self.getBuildArtifact("a.out")

diff  --git a/lldb/test/API/tools/lldb-dap/output/TestDAP_output.py b/lldb/test/API/tools/lldb-dap/output/TestDAP_output.py
index a58de060263ce..325d63cdc15e7 100644
--- a/lldb/test/API/tools/lldb-dap/output/TestDAP_output.py
+++ b/lldb/test/API/tools/lldb-dap/output/TestDAP_output.py
@@ -2,7 +2,7 @@
 Test lldb-dap output events
 """
 
-from lldbsuite.test.decorators import skipIfWindows
+from lldbsuite.test.decorators import skipIfWasm, skipIfWindows
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap.types import LaunchArgs
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
@@ -10,6 +10,7 @@
 
 class TestDAP_output(DAPTestCaseBase):
     @skipIfWindows
+    @skipIfWasm  # WASI block buffers a redirected stdout, so the writes arrive out of order
     def test_output(self):
         """
         Test output handling for the running process.

diff  --git a/lldb/test/API/tools/lldb-dap/restart/TestDAP_restart_console.py b/lldb/test/API/tools/lldb-dap/restart/TestDAP_restart_console.py
index 30780e7b22137..524f0b1f13e73 100644
--- a/lldb/test/API/tools/lldb-dap/restart/TestDAP_restart_console.py
+++ b/lldb/test/API/tools/lldb-dap/restart/TestDAP_restart_console.py
@@ -2,13 +2,20 @@
 Test lldb-dap RestartRequest.
 """
 
-from lldbsuite.test.decorators import skipIf, skipIfAsan, skipIfBuildType, skipIfWindows
+from lldbsuite.test.decorators import (
+    skipIf,
+    skipIfAsan,
+    skipIfBuildType,
+    skipIfWasm,
+    skipIfWindows,
+)
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 from lldbsuite.test.tools.lldb_dap.types import Console, LaunchArgs
 
 
 @skipIfBuildType(["debug"])
+ at skipIfWasm  # runInTerminal has the client run the program, and a Wasm module is not executable
 class TestDAP_restart_console(DAPTestCaseBase):
     @skipIfAsan
     @skipIfWindows  # https://github.com/llvm/llvm-project/issues/200840

diff  --git a/lldb/test/API/tools/lldb-dap/runInTerminal/TestDAP_runInTerminal.py b/lldb/test/API/tools/lldb-dap/runInTerminal/TestDAP_runInTerminal.py
index 59e5527331def..3fd24633eb19e 100644
--- a/lldb/test/API/tools/lldb-dap/runInTerminal/TestDAP_runInTerminal.py
+++ b/lldb/test/API/tools/lldb-dap/runInTerminal/TestDAP_runInTerminal.py
@@ -66,6 +66,7 @@ def read_pipe_message(pipe):
 
 
 @skipIfBuildType(["debug"])
+ at skipIfWasm  # runInTerminal has the client run the program, and a Wasm module is not executable
 class TestDAP_runInTerminal(lldbdap_testcase.DAPTestCaseBase):
     SHARED_BUILD_TESTCASE = False
 

diff  --git a/lldb/test/API/tools/lldb-dap/stackTraceMissingFunctionName/TestDAP_stackTraceMissingFunctionName.py b/lldb/test/API/tools/lldb-dap/stackTraceMissingFunctionName/TestDAP_stackTraceMissingFunctionName.py
index b68e415f73bfb..7e0c883c63fc0 100644
--- a/lldb/test/API/tools/lldb-dap/stackTraceMissingFunctionName/TestDAP_stackTraceMissingFunctionName.py
+++ b/lldb/test/API/tools/lldb-dap/stackTraceMissingFunctionName/TestDAP_stackTraceMissingFunctionName.py
@@ -2,13 +2,14 @@
 Test lldb-dap stack trace response
 """
 
-from lldbsuite.test.decorators import skipIfWindows
+from lldbsuite.test.decorators import skipIfWasm, skipIfWindows
 from lldbsuite.test.tools.lldb_dap.types import LaunchArgs
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
 
 
 class TestDAP_stackTraceMissingFunctionName(DAPTestCaseBase):
     @skipIfWindows
+    @skipIfWasm  # a Wasm indirect call traps without transferring control to the callee
     def test_missingFunctionName(self):
         """
         Test that the stack frame without a function name is given its pc in the response.

diff  --git a/lldb/test/API/tools/lldb-dap/stopped-events/TestDAP_stopped_events.py b/lldb/test/API/tools/lldb-dap/stopped-events/TestDAP_stopped_events.py
index ce2d6cae6a983..54b0c556f0a62 100644
--- a/lldb/test/API/tools/lldb-dap/stopped-events/TestDAP_stopped_events.py
+++ b/lldb/test/API/tools/lldb-dap/stopped-events/TestDAP_stopped_events.py
@@ -8,6 +8,7 @@
     expectedFailureAll,
     expectedFailureNetBSD,
     skipIfLinux,
+    skipIfTargetDoesNotSupportThreads,
     skipIfWindows,
 )
 from lldbsuite.test.lldbtest import line_number
@@ -17,6 +18,7 @@
 
 @skipIfWindows  # This is flakey on Windows: llvm.org/pr24668, llvm.org/pr38373
 @skipIfLinux
+ at skipIfTargetDoesNotSupportThreads()
 class TestDAP_stopped_events(DAPTestCaseBase):
     """
     Test validates 
diff erent operations that produce 'stopped' events.

diff  --git a/lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py b/lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py
index f37ccd6666915..b0a0d41e9e64b 100644
--- a/lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py
+++ b/lldb/test/API/tools/lldb-dap/variables/children/TestDAP_variables_children.py
@@ -1,4 +1,4 @@
-from lldbsuite.test.decorators import expectedFailureAll
+from lldbsuite.test.decorators import expectedFailureAll, skipIfWasm
 from lldbsuite.test.lldbtest import line_number
 from lldbsuite.test.tools.lldb_dap.types import LaunchArgs
 from lldbsuite.test.tools.lldb_dap import DAPTestCaseBase
@@ -40,6 +40,7 @@ def test_get_num_children(self):
         self.assertIn("['Indexed']", resp_body.result)
 
     @expectedFailureAll(archs=["arm$", "arm64", "aarch64"])
+    @skipIfWasm  # there is no ABI plugin for Wasm to find a return value with
     def test_return_variable_with_children(self):
         """
         Test the stepping out of a function with return value show the children correctly

diff  --git a/lldb/test/API/tools/lldb-server/cached-memory-region-info/TestCachedMemoryRegionInfo.py b/lldb/test/API/tools/lldb-server/cached-memory-region-info/TestCachedMemoryRegionInfo.py
index 30695b32a7b45..35c2fc6fec8ca 100644
--- a/lldb/test/API/tools/lldb-server/cached-memory-region-info/TestCachedMemoryRegionInfo.py
+++ b/lldb/test/API/tools/lldb-server/cached-memory-region-info/TestCachedMemoryRegionInfo.py
@@ -9,6 +9,7 @@
 
 
 @skipIfWindowsAndNoLLDBServer
+ at skipIfTargetDoesNotSupportThreads()
 class MemoryRegionInfoPacketsCached(TestBase):
     NO_DEBUG_INFO_TESTCASE = True
 


        


More information about the lldb-commits mailing list