Skip to content

Commit d81c7de

Browse files
committed
Fixup NULLing out array items during DECREF_INPUTS
1 parent b8c3a9e commit d81c7de

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

Python/generated_cases.c.h

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Tools/cases_generator/stack.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ def pop(self, var: StackItem) -> tuple[str, Local]:
264264
defn = f"{var.name} = &stack_pointer[{self.top_offset.to_c()}];\n"
265265
else:
266266
defn = f"{var.name} = stack_pointer[{self.top_offset.to_c()}];\n"
267+
popped.in_local = True
267268
else:
268269
defn = rename
269270
return defn, popped
@@ -680,7 +681,7 @@ def close_variable(var: Local, overwrite: str) -> None:
680681
if output is not None:
681682
if output.is_array():
682683
assert len(self.inputs) == 1
683-
self.stack.pop(self.inputs[0].item)
684+
self.stack.drop(self.inputs[0].item, False)
684685
self.stack.push(output)
685686
self.stack.flush(out)
686687
close_variable(self.inputs[0], "")
@@ -699,7 +700,9 @@ def close_variable(var: Local, overwrite: str) -> None:
699700
for input in reversed(self.inputs[1:]):
700701
input.kill()
701702
self.stack.drop(input.item, self.check_liveness)
702-
self.stack.pop(self.inputs[0].item)
703+
if output is None:
704+
self.inputs[0].kill()
705+
self.stack.drop(self.inputs[0].item, False)
703706
output_in_place = self.outputs and output is self.outputs[0] and lowest.memory_offset is not None
704707
if output_in_place:
705708
output.memory_offset = lowest.memory_offset.copy() # type: ignore[union-attr]

0 commit comments

Comments
 (0)