https://github.com/python/cpython/commit/0bdbc4810165bcbaefd16560d48e94a472557d23
commit: 0bdbc4810165bcbaefd16560d48e94a472557d23
branch: 3.15
author: Miss Islington (bot) <[email protected]>
committer: diegorusso <[email protected]>
date: 2026-05-08T14:24:49Z
summary:

[3.15] Rename fp unwind test module to C stack unwind (GH-149563) (#149565)

files:
A Lib/test/test_c_stack_unwind.py
D Lib/test/test_frame_pointer_unwind.py

diff --git a/Lib/test/test_frame_pointer_unwind.py 
b/Lib/test/test_c_stack_unwind.py
similarity index 92%
rename from Lib/test/test_frame_pointer_unwind.py
rename to Lib/test/test_c_stack_unwind.py
index 1cf5083fd0fdcf..91bf44e463473d 100644
--- a/Lib/test/test_frame_pointer_unwind.py
+++ b/Lib/test/test_c_stack_unwind.py
@@ -1,3 +1,12 @@
+"""Test in-process C stack unwinders against Python and JIT frames.
+
+The tests build a recursive Python call stack, ask each _testinternalcapi
+unwinder for return addresses, and classify those addresses as Python, JIT, or
+other frames. The backends include CPython's manual stack-chain unwinder and
+GNU backtrace(), so this module is about in-process C stack unwinding rather
+than a single unwind mechanism. GDB integration tests live in test_gdb.
+"""
+
 import json
 import os
 import platform
@@ -20,7 +29,7 @@
 STACK_DEPTH = 10
 
 
-def _frame_pointers_expected(machine):
+def _manual_unwind_expected(machine):
     _Py_WITH_FRAME_POINTERS = getattr(
         _testinternalcapi,
         "_Py_WITH_FRAME_POINTERS",
@@ -195,7 +204,7 @@ def 
_annotate_unwind_after_executor_free(unwinder_name="gnu_backtrace_unwind"):
 
 def _run_unwind_helper(helper_name, unwinder_name, **env):
     code = (
-        f"from test.test_frame_pointer_unwind import {helper_name}; "
+        f"from test.test_c_stack_unwind import {helper_name}; "
         f"print({helper_name}({unwinder_name!r}));"
     )
     run_env = os.environ.copy()
@@ -235,15 +244,17 @@ def _unwind_after_executor_free_result(unwinder_name, 
**env):
 
 @support.requires_gil_enabled("test requires the GIL enabled")
 @unittest.skipIf(support.is_wasi, "test not supported on WASI")
-class FramePointerUnwindTests(unittest.TestCase):
+class ManualStackUnwindTests(unittest.TestCase):
 
     def setUp(self):
         super().setUp()
 
         machine = platform.machine().lower()
-        expected = _frame_pointers_expected(machine)
+        expected = _manual_unwind_expected(machine)
         if expected is None:
-            self.skipTest(f"unsupported architecture for frame pointer check: 
{machine}")
+            self.skipTest(
+                f"unsupported architecture for manual stack unwind check: 
{machine}"
+            )
         if expected == "crash":
             self.skipTest(f"test does crash on {machine}")
 
@@ -251,12 +262,14 @@ def setUp(self):
             _testinternalcapi.manual_frame_pointer_unwind()
         except RuntimeError as exc:
             if "not supported" in str(exc):
-                self.skipTest("manual frame pointer unwinding not supported on 
this platform")
+                self.skipTest(
+                    "manual stack unwinding not supported on this platform"
+                )
             raise
         self.machine = machine
-        self.frame_pointers_expected = expected
+        self.manual_unwind_expected = expected
 
-    def test_manual_unwind_respects_frame_pointers(self):
+    def test_manual_unwind_finds_expected_frames(self):
         jit_available = hasattr(sys, "_jit") and sys._jit.is_available()
         envs = [({"PYTHON_JIT": "0"}, False)]
         if jit_available:
@@ -268,7 +281,7 @@ def test_manual_unwind_respects_frame_pointers(self):
                 jit_frames = result["jit_frames"]
                 python_frames = result.get("python_frames", 0)
                 jit_backend = result.get("jit_backend")
-                if self.frame_pointers_expected:
+                if self.manual_unwind_expected:
                     self.assertGreaterEqual(
                         python_frames,
                         STACK_DEPTH,

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to