authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-03-01 22:51:04+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-03-01 22:51:04+01:00
log836f007c22e50557dde46c8f766e1150c25271b3
tree5c48f12bf4ffcdf5550802760a86eedf3e9276b9
parente8eb9778cccd2f2d23027d9e0d73d7053bf92efe

codegen: ensure we descend on nested field_ptrs when lowering


2 files changed, 13 insertions(+), 1 deletions(-)

src/codegen.zig+13
...@@ -339,6 +339,19 @@ pub fn generateSymbol(...@@ -339,6 +339,19 @@ pub fn generateSymbol(
339 .addend = (reloc_info.addend orelse 0) + addend,339 .addend = (reloc_info.addend orelse 0) + addend,
340 });340 });
341 },341 },
342 .field_ptr => {
343 switch (try generateSymbol(bin_file, src_loc, .{
344 .ty = typed_value.ty,
345 .val = container_ptr,
346 }, code, debug_output, reloc_info)) {
347 .appended => {},
348 .externally_managed => |external_slice| {
349 code.appendSliceAssumeCapacity(external_slice);
350 },
351 .fail => |em| return Result{ .fail = em },
352 }
353 return Result{ .appended = {} };
354 },
342 else => return Result{355 else => return Result{
343 .fail = try ErrorMsg.create(356 .fail = try ErrorMsg.create(
344 bin_file.allocator,357 bin_file.allocator,
test/behavior/struct.zig-1
...@@ -780,7 +780,6 @@ test "packed struct with u0 field access" {...@@ -780,7 +780,6 @@ test "packed struct with u0 field access" {
780780
781test "access to global struct fields" {781test "access to global struct fields" {
782 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO782 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
783 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
784 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO783 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
785 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO784 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
786 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO785 if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO