[Lldb-commits] [lldb] [lldb][test] Give each inline test its own function object (PR #215400)
via lldb-commits
lldb-commits at lists.llvm.org
Mon Aug 10 14:08:45 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-lldb
Author: Augusto Noronha (augusto2112)
<details>
<summary>Changes</summary>
`MakeInlineTest` handed every generated test class the one shared `InlineTest._test` function object, and several decorators record their state on the function object they are handed rather than on a wrapper. Some tests would mutate this state, causing some tests to unexpectedly run with decorators thei weren't annotated with.
Assisted-by: Claude
---
Full diff: https://github.com/llvm/llvm-project/pull/215400.diff
2 Files Affected:
- (modified) lldb/packages/Python/lldbsuite/test/decorators.py (+14)
- (modified) lldb/packages/Python/lldbsuite/test/lldbinline.py (+3-1)
``````````diff
diff --git a/lldb/packages/Python/lldbsuite/test/decorators.py b/lldb/packages/Python/lldbsuite/test/decorators.py
index 6524d73e4a349..5b4308a619670 100644
--- a/lldb/packages/Python/lldbsuite/test/decorators.py
+++ b/lldb/packages/Python/lldbsuite/test/decorators.py
@@ -263,6 +263,20 @@ def expectedFailure_impl(func):
return expectedFailure_impl
+def FreshTestFunction(src):
+ """Return a private copy of *src* for one generated test class to own.
+
+ Several decorators record their state on the function object they are
+ handed instead of on a wrapper.
+ """
+
+ @wraps(src)
+ def copy(self):
+ return src(self)
+
+ return copy
+
+
def _skipForVariant(variant_name, expected_fn, bugnumber=None):
"""Mark a test method as skipped for a specific variant dimension.
diff --git a/lldb/packages/Python/lldbsuite/test/lldbinline.py b/lldb/packages/Python/lldbsuite/test/lldbinline.py
index d1225db4d61a9..0b92e25af1a20 100644
--- a/lldb/packages/Python/lldbsuite/test/lldbinline.py
+++ b/lldb/packages/Python/lldbsuite/test/lldbinline.py
@@ -197,7 +197,9 @@ def MakeInlineTest(__file, __globals, decorators=None, name=None, build_dict=Non
file_basename = os.path.basename(__file)
name, _ = os.path.splitext(file_basename)
- test_func = ApplyDecoratorsToFunction(InlineTest._test, decorators)
+ test_func = ApplyDecoratorsToFunction(
+ FreshTestFunction(InlineTest._test), decorators
+ )
# Build the test case
test_class = type(
name, (InlineTest,), dict(test=test_func, name=name, _build_dict=build_dict)
``````````
</details>
https://github.com/llvm/llvm-project/pull/215400
More information about the lldb-commits
mailing list