https://github.com/python/cpython/commit/d836d287a7bd1392f6d011888a7469854b0f4325
commit: d836d287a7bd1392f6d011888a7469854b0f4325
branch: main
author: Mark Shannon <m...@hotpy.org>
committer: markshannon <m...@hotpy.org>
date: 2025-03-27T08:32:45Z
summary:

GH-131729: Consider in-memory state when merging storage and stack (GH-131773)

files:
M Python/executor_cases.c.h
M Python/generated_cases.c.h
M Tools/cases_generator/stack.py

diff --git a/Python/executor_cases.c.h b/Python/executor_cases.c.h
index 6d5f3dd1f6b935..b3c32c5c5d029f 100644
--- a/Python/executor_cases.c.h
+++ b/Python/executor_cases.c.h
@@ -3933,6 +3933,7 @@
                 PyStackRef_CLOSE(tmp);
                 stack_pointer = _PyFrame_GetStackPointer(frame);
             }
+            stack_pointer[-1] = b;
             break;
         }
 
@@ -4116,6 +4117,7 @@
                     stack_pointer = _PyFrame_GetStackPointer(frame);
                 }
             }
+            stack_pointer[-1] = iter;
             break;
         }
 
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index f6a538e98fe129..0314f983506b0d 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -6009,6 +6009,7 @@
                     stack_pointer = _PyFrame_GetStackPointer(frame);
                 }
             }
+            stack_pointer[-1] = iter;
             DISPATCH();
         }
 
diff --git a/Tools/cases_generator/stack.py b/Tools/cases_generator/stack.py
index 62253ccb5e2c0d..94a5d395064191 100644
--- a/Tools/cases_generator/stack.py
+++ b/Tools/cases_generator/stack.py
@@ -378,6 +378,8 @@ def merge(self, other: "Stack", out: CWriter) -> None:
             if self_var.memory_offset is not None:
                 if self_var.memory_offset != other_var.memory_offset:
                     raise StackError(f"Mismatched stack depths for 
{self_var.name}: {self_var.memory_offset} and {other_var.memory_offset}")
+            elif other_var.memory_offset is None:
+                self_var.memory_offset = None
 
 
 def stacks(inst: Instruction | PseudoInstruction) -> Iterator[StackEffect]:
@@ -601,6 +603,11 @@ def merge(self, other: "Storage", out: CWriter) -> None:
         if len(self.outputs) != len(other.outputs):
             var = self.outputs[0] if len(self.outputs) > len(other.outputs) 
else other.outputs[0]
             raise StackError(f"'{var.name}' is set on some paths, but not all")
+        for var, other_var in zip(self.outputs, other.outputs):
+            if var.memory_offset is None:
+                other_var.memory_offset = None
+            elif other_var.memory_offset is None:
+                var.memory_offset = None
         self.stack.merge(other.stack, out)
         self.sanity_check()
 

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to