mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
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.
This commit is contained in:
parent
f78be59c83
commit
bebaa95fd0
2 changed files with 16 additions and 11 deletions
|
@ -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")
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Fix test_gdb.test_pycfunction() for Python built with ``clang -Og``.
|
||||
Tolerate inlined functions in the gdb traceback. Patch by Victor Stinner.
|
Loading…
Add table
Add a link
Reference in a new issue