Skip to content

Annotated assignment in a match block does not generate SETUP_ANNOTATIONS #105164

Description

@martindemello

Bug report

Compiling the following code:

match 0:
case 0:
x: int = 1

generates

 1 0 LOAD_CONST 0 (0)
2 2 LOAD_CONST 0 (0)
4 COMPARE_OP 2 (==)
6 POP_JUMP_IF_FALSE 12 (to 24)
3 8 LOAD_CONST 1 (1)
10 STORE_NAME 0 (x)
12 LOAD_NAME 1 (int)
14 LOAD_NAME 2 (__annotations__)
16 LOAD_CONST 2 ('x')
18 STORE_SUBSCR
20 LOAD_CONST 3 (None)
22 RETURN_VALUE
2 >> 24 LOAD_CONST 3 (None)
26 RETURN_VALUE

There is no SETUP_ANNOTATIONS opcode generated despite the __annotations__ access later on. (Found via google/pytype#1435 - for some reason this does not generate a runtime error, but it does cause issues for tools like pytype.)

Your environment

cpython 3.10

Linked PRs

Metadata

Metadata

Assignees

Labels

3.11only security fixes3.12only security fixes3.13bugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)triagedThe issue has been accepted as valid by a triager.type-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions