Repository navigation
Multi-line arguments in a function call crashes CPython #101928
Description
Activity
- addedtype-crashA hard crash of the interpreter, possibly with a core dumpA hard crash of the interpreter, possibly with a core dump
on Feb 15, 2023 - changed the title
[-]Multi-line arguments in function call crashes CPython[/-][+]Multi-line arguments in a function call crashes CPython[/+]on Feb 15, 2023 - addedinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)
on Feb 15, 2023 Thanks for the report! I bisected this to #101633 cc @penguin-wwy @iritkatriel
Thank you @hauntsaninja.
I see the problem - we are now creating a basicblock with
RETURN_CONST followed by NOP, and the redundant NOP is not being removed before propagate_line_numbers() uses BB_HAS_FALLTHROUGH on the block, which only looks at the last instruction to see if it exits the block.
Possible fixes:
- (easiest) replace LOAD_CONST, RETURN_VALUE by NOP, RETURN_CONST (instead of RETURN_CONST, NOP).
- make sure the redundant NOP is removed before propagate_line_numbers is called
I'll fix it tomorrow if nobody else will beat me to it.
Reacted by penguin_wwy and Michael DroettboomThank you @hauntsaninja.
I see the problem - we are now creating a basicblock with
RETURN_CONST followed by NOP, and the redundant NOP is not being removed before propagate_line_numbers() uses BB_HAS_FALLTHROUGH on the block, which only looks at the last instruction to see if it exits the block.
Possible fixes:
1. (easiest) replace LOAD_CONST, RETURN_VALUE by NOP, RETURN_CONST (instead of RETURN_CONST, NOP). 2. make sure the redundant NOP is removed before propagate_line_numbers is calledI'll fix it tomorrow if nobody else will beat me to it.
@iritkatriel Thanks for the fix suggestion, I tried to fix it using the first method and it seems to have minimal impact and is effective.
Reacted by Michael Droettboom- added a commit that references this issue
on Feb 16, 2023 Thanks for the report @xiaxinmeng, and for the fix @penguin-wwy .
- moved this from Todo to Done in Release and Deferred blockers 🚫
on Feb 16, 2023
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsDone
Crash report
In a function call, if one argument is split in two lines, CPython crashes. For example, we split the lambda expression, i.e., lamda_exp=lambda:1, in test2.py into two lines (See test1.py) . CPython reports a segmentation fault.
This crash just occurs on the latest main branch(e.g.commit a1f08f5, 8a2b7ee ). The older version of CPython(e.g. CPython 3.10.8, CPython 3.9.0 ) does not report any crash.
test1.py (Segmentation fault)
test2.py (work well )
Error messages
Segmentation Fault
Your environment
Linked PRs