summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2022-02-01 17:12:26 (GMT)
committerGitHub <noreply@github.com>2022-02-01 17:12:26 (GMT)
commitbebaa95fd0f44babf8b6bcffd8f2908c73ca259e (patch)
tree8a79ca78d827d5153f8bee5c197fc5d0c147b502 /Lib
parentf78be59c83c151d94902daef56218530c52e29e7 (diff)
downloadcpython-bebaa95fd0f44babf8b6bcffd8f2908c73ca259e.zip
cpython-bebaa95fd0f44babf8b6bcffd8f2908c73ca259e.tar.gz
cpython-bebaa95fd0f44babf8b6bcffd8f2908c73ca259e.tar.bz2
bpo-46600: Fix test_gdb.test_pycfunction() for clang -Og (GH-31058)
Fix test_gdb.test_pycfunction() for Python built with clang -Og. Tolerate inlined functions in the gdb traceback. When _testcapimodule.c is built by clang -Og, _null_to_none() is inlined in meth_varargs() and so gdb returns _null_to_none() as the frame #1. If it's not inlined, meth_varargs() is the frame #1.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_gdb.py25
1 files changed, 14 insertions, 11 deletions
diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py
index eaeb6fb..344fd3d 100644
--- a/Lib/test/test_gdb.py
+++ b/Lib/test/test_gdb.py
@@ -897,15 +897,19 @@ id(42)
# to suppress these. See also the comment in DebuggerTests.get_stack_trace
def test_pycfunction(self):
'Verify that "py-bt" displays invocations of PyCFunction instances'
+ # bpo-46600: If the compiler inlines _null_to_none() in meth_varargs()
+ # (ex: clang -Og), _null_to_none() is the frame #1. Otherwise,
+ # meth_varargs() is the frame #1.
+ expected_frame = r'#(1|2)'
# Various optimizations multiply the code paths by which these are
# called, so test a variety of calling conventions.
- for func_name, args, expected_frame in (
- ('meth_varargs', '', 1),
- ('meth_varargs_keywords', '', 1),
- ('meth_o', '[]', 1),
- ('meth_noargs', '', 1),
- ('meth_fastcall', '', 1),
- ('meth_fastcall_keywords', '', 1),
+ for func_name, args in (
+ ('meth_varargs', ''),
+ ('meth_varargs_keywords', ''),
+ ('meth_o', '[]'),
+ ('meth_noargs', ''),
+ ('meth_fastcall', ''),
+ ('meth_fastcall_keywords', ''),
):
for obj in (
'_testcapi',
@@ -945,10 +949,9 @@ id(42)
# defined.' message in stderr.
ignore_stderr=True,
)
- self.assertIn(
- f'#{expected_frame} <built-in method {func_name}',
- gdb_output,
- )
+ regex = expected_frame
+ regex += re.escape(f' <built-in method {func_name}')
+ self.assertRegex(gdb_output, regex)
@unittest.skipIf(python_is_optimized(),
"Python was compiled with optimizations")