|
5 | 5 | from mypyc.analysis.ircheck import FnError, can_coerce_to, check_func_ir
|
6 | 6 | from mypyc.ir.class_ir import ClassIR
|
7 | 7 | from mypyc.ir.func_ir import FuncDecl, FuncIR, FuncSignature
|
8 |
| -from mypyc.ir.ops import Assign, BasicBlock, Goto, Integer, LoadLiteral, Op, Register, Return |
| 8 | +from mypyc.ir.ops import ( |
| 9 | + Assign, |
| 10 | + BasicBlock, |
| 11 | + Goto, |
| 12 | + Integer, |
| 13 | + LoadAddress, |
| 14 | + LoadLiteral, |
| 15 | + Op, |
| 16 | + Register, |
| 17 | + Return, |
| 18 | +) |
9 | 19 | from mypyc.ir.pprint import format_func
|
10 | 20 | from mypyc.ir.rtypes import (
|
11 | 21 | RInstance,
|
|
16 | 26 | int64_rprimitive,
|
17 | 27 | none_rprimitive,
|
18 | 28 | object_rprimitive,
|
| 29 | + pointer_rprimitive, |
19 | 30 | str_rprimitive,
|
20 | 31 | )
|
21 | 32 |
|
@@ -88,7 +99,7 @@ def test_invalid_register_source(self) -> None:
|
88 | 99 | ret = Return(value=Register(type=none_rprimitive, name="r1"))
|
89 | 100 | block = self.basic_block([ret])
|
90 | 101 | fn = FuncIR(decl=self.func_decl(name="func_1"), arg_regs=[], blocks=[block])
|
91 |
| - assert_has_error(fn, FnError(source=ret, desc="Invalid op reference to register r1")) |
| 102 | + assert_has_error(fn, FnError(source=ret, desc="Invalid op reference to register 'r1'")) |
92 | 103 |
|
93 | 104 | def test_invalid_op_source(self) -> None:
|
94 | 105 | ret = Return(value=LoadLiteral(value="foo", rtype=str_rprimitive))
|
@@ -170,3 +181,19 @@ def test_pprint(self) -> None:
|
170 | 181 | " goto L1",
|
171 | 182 | " ERR: Invalid control operation target: 1",
|
172 | 183 | ]
|
| 184 | + |
| 185 | + def test_load_address_declares_register(self) -> None: |
| 186 | + rx = Register(str_rprimitive, "x") |
| 187 | + ry = Register(pointer_rprimitive, "y") |
| 188 | + load_addr = LoadAddress(pointer_rprimitive, rx) |
| 189 | + assert_no_errors( |
| 190 | + FuncIR( |
| 191 | + decl=self.func_decl(name="func_1"), |
| 192 | + arg_regs=[], |
| 193 | + blocks=[ |
| 194 | + self.basic_block( |
| 195 | + ops=[load_addr, Assign(ry, load_addr), Return(value=NONE_VALUE)] |
| 196 | + ) |
| 197 | + ], |
| 198 | + ) |
| 199 | + ) |
0 commit comments