gh-138679: Opcodes which consume no inputs should indicate they produced the val… (#138678)

Opcodes which consume no inputs should indicate they produced the value, not an arbitrary local
This commit is contained in:
Dino Viehland 2025-09-08 13:53:12 -07:00 committed by GitHub
parent 6831634eb7
commit 1561385863
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 8 additions and 1 deletions

View file

@ -1116,6 +1116,13 @@ def trace(frame, event, arg):
self.assertInBytecode(f, "LOAD_FAST_BORROW")
self.assertNotInBytecode(f, "LOAD_FAST_CHECK")
def test_import_from_doesnt_clobber_load_fast_borrow(self):
def f(self):
if x: pass
self.x
from shutil import ExecError
print(ExecError)
self.assertInBytecode(f, "LOAD_FAST_BORROW", "self")
class DirectCfgOptimizerTests(CfgOptimizationTestCase):

View file

@ -2891,7 +2891,7 @@ optimize_load_fast(cfg_builder *g)
int num_pushed = _PyOpcode_num_pushed(opcode, oparg);
int net_pushed = num_pushed - num_popped;
assert(net_pushed >= 0);
for (int i = 0; i < net_pushed; i++) {
for (int j = 0; j < net_pushed; j++) {
PUSH_REF(i, NOT_LOCAL);
}
break;