[Lldb-commits] [lldb] [lldb][Windows] extend @skipIfWindows to lldb-server or in process (PR #202688)
Charles Zablit via lldb-commits
lldb-commits at lists.llvm.org
Tue Jun 9 09:08:56 PDT 2026
https://github.com/charles-zablit updated https://github.com/llvm/llvm-project/pull/202688
>From 385f55a21a7468a982606876ab58e6a00bc62885 Mon Sep 17 00:00:00 2001
From: Charles Zablit <c_zablit at apple.com>
Date: Tue, 9 Jun 2026 17:08:44 +0100
Subject: [PATCH] [lldb][Windows] extend @skipIfWindows to lldb-server or in
process
---
.../Python/lldbsuite/test/decorators.py | 44 +++++++++++++++++++
.../platform/connect/TestPlatformConnect.py | 4 +-
.../TestBreakpointCommand.py | 2 +-
.../TestBreakpointLocations.py | 2 +-
.../TestDelayedBreakpoint.py | 2 +-
.../TestFrameProviderCircularDependency.py | 4 +-
6 files changed, 51 insertions(+), 7 deletions(-)
diff --git a/lldb/packages/Python/lldbsuite/test/decorators.py b/lldb/packages/Python/lldbsuite/test/decorators.py
index 134591d3a5c67..43a5a1561563c 100644
--- a/lldb/packages/Python/lldbsuite/test/decorators.py
+++ b/lldb/packages/Python/lldbsuite/test/decorators.py
@@ -676,6 +676,36 @@ def expectedFailureWindows(bugnumber=None):
return expectedFailureOS(["windows"], bugnumber)
+def _usingLLDBServerOnWindows():
+ """Return True if Windows tests should drive lldb-server instead of the
+ in-process Win32 ``windows`` process plugin.
+
+ The choice is controlled by the ``LLDB_USE_LLDB_SERVER`` environment
+ variable: unset/off selects the default in-process plugin, on selects
+ the gdb-remote path through ``lldb-server``.
+ """
+ return os.environ.get("LLDB_USE_LLDB_SERVER", "").lower() in (
+ "on",
+ "yes",
+ "1",
+ "true",
+ )
+
+
+def expectedFailureWindowsAndLLDBServer(bugnumber=None):
+ """Mark a test as xfail on Windows when driving lldb-server."""
+ if not _usingLLDBServerOnWindows():
+ return lambda func: func
+ return expectedFailureOS(["windows"], bugnumber)
+
+
+def expectedFailureWindowsAndNoLLDBServer(bugnumber=None):
+ """Mark a test as xfail on Windows when using the in-process plugin."""
+ if _usingLLDBServerOnWindows():
+ return lambda func: func
+ return expectedFailureOS(["windows"], bugnumber)
+
+
# TODO: This decorator does not do anything. Remove it.
def expectedFlakey(expected_fn, bugnumber=None):
def expectedFailure_impl(func):
@@ -916,6 +946,20 @@ def version_check():
return decorator
+def skipIfWindowsAndLLDBServer(func):
+ """Skip tests on Windows when driving lldb-server."""
+ if not _usingLLDBServerOnWindows():
+ return func
+ return skipIfPlatform(["windows"])(func)
+
+
+def skipIfWindowsAndNoLLDBServer(func):
+ """Skip tests on Windows when using the in-process plugin."""
+ if _usingLLDBServerOnWindows():
+ return func
+ return skipIfPlatform(["windows"])(func)
+
+
def skipIfWindowsAndNonEnglish(func):
"""Decorate the item to skip tests that should be skipped on non-English locales on Windows."""
diff --git a/lldb/test/API/commands/platform/connect/TestPlatformConnect.py b/lldb/test/API/commands/platform/connect/TestPlatformConnect.py
index 0f9a51e216215..3f8d81c3ab897 100644
--- a/lldb/test/API/commands/platform/connect/TestPlatformConnect.py
+++ b/lldb/test/API/commands/platform/connect/TestPlatformConnect.py
@@ -13,7 +13,7 @@ class TestPlatformProcessConnect(TestBase):
@skipIfRemote
@expectedFailureAll(hostoslist=["windows"], triple=".*-android")
@skipIfDarwin # lldb-server not found correctly
- @expectedFailureAll(oslist=["windows"]) # process modules not loaded
+ @expectedFailureWindowsAndNoLLDBServer() # process modules not loaded
# lldb-server platform times out waiting for the gdbserver port number to be
# written to the pipe, yet it seems the gdbserver already has written it.
@expectedFailureAll(
@@ -62,7 +62,7 @@ def test_platform_process_connect(self):
@skipIfRemote
@expectedFailureAll(hostoslist=["windows"], triple=".*-android")
@skipIfDarwin # lldb-server not found correctly
- @expectedFailureAll(oslist=["windows"]) # process modules not loaded
+ @expectedFailureWindowsAndNoLLDBServer() # process modules not loaded
# lldb-server platform times out waiting for the gdbserver port number to be
# written to the pipe, yet it seems the gdbserver already has written it.
@expectedFailureAll(
diff --git a/lldb/test/API/functionalities/breakpoint/breakpoint_command/TestBreakpointCommand.py b/lldb/test/API/functionalities/breakpoint/breakpoint_command/TestBreakpointCommand.py
index 6139584c1b0d9..3ad65a202ad83 100644
--- a/lldb/test/API/functionalities/breakpoint/breakpoint_command/TestBreakpointCommand.py
+++ b/lldb/test/API/functionalities/breakpoint/breakpoint_command/TestBreakpointCommand.py
@@ -16,7 +16,7 @@ class BreakpointCommandTestCase(TestBase):
NO_DEBUG_INFO_TESTCASE = True
SHARED_BUILD_TESTCASE = False
- @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24528")
+ @expectedFailureWindowsAndNoLLDBServer(bugnumber="llvm.org/pr24528")
def test_breakpoint_command_sequence(self):
"""Test a sequence of breakpoint command add, list, and delete."""
self.build()
diff --git a/lldb/test/API/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py b/lldb/test/API/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py
index 6ed3c902f79e3..4c8c90bc81f97 100644
--- a/lldb/test/API/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py
+++ b/lldb/test/API/functionalities/breakpoint/breakpoint_locations/TestBreakpointLocations.py
@@ -10,7 +10,7 @@
class BreakpointLocationsTestCase(TestBase):
- @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24528")
+ @expectedFailureWindowsAndNoLLDBServer(bugnumber="llvm.org/pr24528")
def test_enable(self):
"""Test breakpoint enable/disable for a breakpoint ID with multiple locations."""
self.build()
diff --git a/lldb/test/API/functionalities/breakpoint/delayed_breakpoints/TestDelayedBreakpoint.py b/lldb/test/API/functionalities/breakpoint/delayed_breakpoints/TestDelayedBreakpoint.py
index a3709fd62a202..2d5da3f672729 100644
--- a/lldb/test/API/functionalities/breakpoint/delayed_breakpoints/TestDelayedBreakpoint.py
+++ b/lldb/test/API/functionalities/breakpoint/delayed_breakpoints/TestDelayedBreakpoint.py
@@ -5,7 +5,7 @@
import os
- at skipIfWindows
+ at skipIfWindowsAndNoLLDBServer
class TestDelayedBreakpoint(TestBase):
def test(self):
self.build()
diff --git a/lldb/test/API/functionalities/scripted_frame_provider/circular_dependency/TestFrameProviderCircularDependency.py b/lldb/test/API/functionalities/scripted_frame_provider/circular_dependency/TestFrameProviderCircularDependency.py
index dcba03e0413a2..87a30c150e4e3 100644
--- a/lldb/test/API/functionalities/scripted_frame_provider/circular_dependency/TestFrameProviderCircularDependency.py
+++ b/lldb/test/API/functionalities/scripted_frame_provider/circular_dependency/TestFrameProviderCircularDependency.py
@@ -47,7 +47,7 @@ def launch_and_stop_at_breakpoint(self):
return target, thread
@expectedFailureAll(oslist=["linux"], archs=["arm$"])
- @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
+ @expectedFailureWindowsAndNoLLDBServer(bugnumber="llvm.org/pr24778")
def test_circular_dependency_with_function_replacement(self):
"""
Test the circular dependency fix with a provider that replaces function names.
@@ -165,7 +165,7 @@ def test_circular_dependency_handle_command_in_init(self):
frame.GetFunctionName(), f"Frame {i} should have function name"
)
- @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr24778")
+ @expectedFailureWindowsAndNoLLDBServer(bugnumber="llvm.org/pr24778")
def test_circular_dependency_evaluate_expression_in_get_frame(self):
"""
Test that calling EvaluateExpression in get_frame_at_index doesn't
More information about the lldb-commits
mailing list