-
-
Notifications
You must be signed in to change notification settings - Fork 32.7k
Open
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Tier 1 case generator emits stack spill for every subsequent escaping call, when subsequent escaping calls are separated by comment(s). Example:
Subsequent escaping calls without comments in between:
Bytecode definition:
pure inst(NOP, (--)) {
escaping_call1();
escaping_call2();
escaping_call3();
}
Generated case:
TARGET(NOP) {
frame->instr_ptr = next_instr;
next_instr += 1;
INSTRUCTION_STATS(NOP);
_PyFrame_SetStackPointer(frame, stack_pointer);
escaping_call1();
escaping_call2();
escaping_call3();
stack_pointer = _PyFrame_GetStackPointer(frame);
DISPATCH();
}
Subsequent escaping calls with comments in between:
Bytecode definition:
pure inst(NOP, (--)) {
escaping_call1();
// comment1
escaping_call2();
// comment2
escaping_call3();
}
Generated case:
TARGET(NOP) {
frame->instr_ptr = next_instr;
next_instr += 1;
INSTRUCTION_STATS(NOP);
_PyFrame_SetStackPointer(frame, stack_pointer);
escaping_call1();
stack_pointer = _PyFrame_GetStackPointer(frame);
// comment1
_PyFrame_SetStackPointer(frame, stack_pointer);
escaping_call2();
stack_pointer = _PyFrame_GetStackPointer(frame);
// comment2
_PyFrame_SetStackPointer(frame, stack_pointer);
escaping_call3();
stack_pointer = _PyFrame_GetStackPointer(frame);
DISPATCH();
}
CPython versions tested on:
CPython main branch
Operating systems tested on:
No response
Linked PRs
Metadata
Metadata
Assignees
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error