]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-128045: Mark unknown opcodes as deopting to themselves (#128044)
authorDino Viehland <dinoviehland@meta.com>
Mon, 19 May 2025 14:15:16 +0000 (10:15 -0400)
committerGitHub <noreply@github.com>
Mon, 19 May 2025 14:15:16 +0000 (10:15 -0400)
* Mark unknown opcodes as deopting to themselves

Include/internal/pycore_opcode_metadata.h
Tools/cases_generator/opcode_metadata_generator.py

index e55e26783a62004ab866fc79f50d8871179b21ca..71859476e4f9012ebc60fcd245fcf9e203aa9a26 100644 (file)
@@ -1787,6 +1787,38 @@ const uint8_t _PyOpcode_Caches[256] = {
 extern const uint8_t _PyOpcode_Deopt[256];
 #ifdef NEED_OPCODE_METADATA
 const uint8_t _PyOpcode_Deopt[256] = {
+    [119] = 119,
+    [120] = 120,
+    [121] = 121,
+    [122] = 122,
+    [123] = 123,
+    [124] = 124,
+    [125] = 125,
+    [126] = 126,
+    [127] = 127,
+    [211] = 211,
+    [212] = 212,
+    [213] = 213,
+    [214] = 214,
+    [215] = 215,
+    [216] = 216,
+    [217] = 217,
+    [218] = 218,
+    [219] = 219,
+    [220] = 220,
+    [221] = 221,
+    [222] = 222,
+    [223] = 223,
+    [224] = 224,
+    [225] = 225,
+    [226] = 226,
+    [227] = 227,
+    [228] = 228,
+    [229] = 229,
+    [230] = 230,
+    [231] = 231,
+    [232] = 232,
+    [233] = 233,
     [BINARY_OP] = BINARY_OP,
     [BINARY_OP_ADD_FLOAT] = BINARY_OP,
     [BINARY_OP_ADD_INT] = BINARY_OP,
index 620e4b6f1f4a69f8c61db157eca94fe49d971033..10567204dcc599337056a97c5f7d189d0d43c060 100644 (file)
@@ -157,6 +157,13 @@ def generate_deopt_table(analysis: Analysis, out: CWriter) -> None:
         if inst.family is not None:
             deopt = inst.family.name
         deopts.append((inst.name, deopt))
+    defined = set(analysis.opmap.values())
+    for i in range(256):
+        if i not in defined:
+            deopts.append((f'{i}', f'{i}'))
+
+    assert len(deopts) == 256
+    assert len(set(x[0] for x in deopts)) == 256
     for name, deopt in sorted(deopts):
         out.emit(f"[{name}] = {deopt},\n")
     out.emit("};\n\n")