diff options
| author | Jakub Konka <kubkon@jakubkonka.com> | 2022-03-03 00:03:54 +0100 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-03-02 20:04:34 -0500 |
| commit | 3ec74a1cd8b868b7cebfd584dec3f20a9aa2bda6 (patch) | |
| tree | c8406c16704cd4a47247618395257180cf7f3a0d /src/codegen.zig | |
| parent | 1c8a86f063b65e95c2e23ceaa40843069adfdc23 (diff) | |
| download | zig-3ec74a1cd8b868b7cebfd584dec3f20a9aa2bda6.tar.gz zig-3ec74a1cd8b868b7cebfd584dec3f20a9aa2bda6.zip | |
codegen: handle elem_ptr when lowering to memory
* x64: handle storing from-to non-stack memory
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/codegen.zig b/src/codegen.zig index f0cf8da3b3..265c205f2f 100644 --- a/src/codegen.zig +++ b/src/codegen.zig @@ -392,6 +392,30 @@ pub fn generateSymbol( }, } }, + .elem_ptr => { + const elem_ptr = typed_value.val.castTag(.elem_ptr).?.data; + const elem_size = typed_value.ty.childType().abiSize(target); + const addend = @intCast(u32, elem_ptr.index * elem_size); + const array_ptr = elem_ptr.array_ptr; + + switch (array_ptr.tag()) { + .decl_ref => { + const decl = array_ptr.castTag(.decl_ref).?.data; + return lowerDeclRef(bin_file, src_loc, typed_value, decl, code, debug_output, .{ + .parent_atom_index = reloc_info.parent_atom_index, + .addend = (reloc_info.addend orelse 0) + addend, + }); + }, + else => return Result{ + .fail = try ErrorMsg.create( + bin_file.allocator, + src_loc, + "TODO implement generateSymbol for pointer type value: '{s}'", + .{@tagName(typed_value.val.tag())}, + ), + }, + } + }, else => return Result{ .fail = try ErrorMsg.create( bin_file.allocator, |
