mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
codegen: handle variable and decl_ref_mut consistently
This commit is contained in:
parent
40ef796278
commit
31429a4e86
@ -341,14 +341,20 @@ pub fn generateSymbol(
|
||||
}
|
||||
return Result.ok;
|
||||
},
|
||||
.variable => {
|
||||
const decl = typed_value.val.castTag(.variable).?.data.owner_decl;
|
||||
return lowerDeclRef(bin_file, src_loc, typed_value, decl, code, debug_output, reloc_info);
|
||||
},
|
||||
.decl_ref => {
|
||||
const decl = typed_value.val.castTag(.decl_ref).?.data;
|
||||
return lowerDeclRef(bin_file, src_loc, typed_value, decl, code, debug_output, reloc_info);
|
||||
},
|
||||
.variable, .decl_ref, .decl_ref_mut => |tag| return lowerDeclRef(
|
||||
bin_file,
|
||||
src_loc,
|
||||
typed_value,
|
||||
switch (tag) {
|
||||
.variable => typed_value.val.castTag(.variable).?.data.owner_decl,
|
||||
.decl_ref => typed_value.val.castTag(.decl_ref).?.data,
|
||||
.decl_ref_mut => typed_value.val.castTag(.decl_ref_mut).?.data.decl_index,
|
||||
else => unreachable,
|
||||
},
|
||||
code,
|
||||
debug_output,
|
||||
reloc_info,
|
||||
),
|
||||
.slice => {
|
||||
const slice = typed_value.val.castTag(.slice).?.data;
|
||||
|
||||
@ -787,11 +793,11 @@ pub fn generateSymbol(
|
||||
},
|
||||
else => unreachable,
|
||||
},
|
||||
else => |t| return Result{ .fail = try ErrorMsg.create(
|
||||
else => |tag| return Result{ .fail = try ErrorMsg.create(
|
||||
bin_file.allocator,
|
||||
src_loc,
|
||||
"TODO implement generateSymbol for type '{s}'",
|
||||
.{@tagName(t)},
|
||||
.{@tagName(tag)},
|
||||
) },
|
||||
}
|
||||
}
|
||||
@ -852,28 +858,26 @@ fn lowerParentPtr(
|
||||
reloc_info.offset(@intCast(u32, elem_ptr.index * elem_ptr.elem_ty.abiSize(target))),
|
||||
);
|
||||
},
|
||||
.decl_ref => {
|
||||
const decl_index = parent_ptr.castTag(.decl_ref).?.data;
|
||||
return lowerDeclRef(
|
||||
bin_file,
|
||||
src_loc,
|
||||
typed_value,
|
||||
decl_index,
|
||||
code,
|
||||
debug_output,
|
||||
reloc_info,
|
||||
);
|
||||
},
|
||||
else => |t| {
|
||||
return Result{
|
||||
.fail = try ErrorMsg.create(
|
||||
bin_file.allocator,
|
||||
src_loc,
|
||||
"TODO implement lowerParentPtr for type '{s}'",
|
||||
.{@tagName(t)},
|
||||
),
|
||||
};
|
||||
},
|
||||
.variable, .decl_ref, .decl_ref_mut => |tag| return lowerDeclRef(
|
||||
bin_file,
|
||||
src_loc,
|
||||
typed_value,
|
||||
switch (tag) {
|
||||
.variable => parent_ptr.castTag(.variable).?.data.owner_decl,
|
||||
.decl_ref => parent_ptr.castTag(.decl_ref).?.data,
|
||||
.decl_ref_mut => parent_ptr.castTag(.decl_ref_mut).?.data.decl_index,
|
||||
else => unreachable,
|
||||
},
|
||||
code,
|
||||
debug_output,
|
||||
reloc_info,
|
||||
),
|
||||
else => |tag| return Result{ .fail = try ErrorMsg.create(
|
||||
bin_file.allocator,
|
||||
src_loc,
|
||||
"TODO implement lowerParentPtr for type '{s}'",
|
||||
.{@tagName(tag)},
|
||||
) },
|
||||
}
|
||||
}
|
||||
|
||||
@ -1126,6 +1130,9 @@ pub fn genTypedValue(
|
||||
const ptr_bits = target.cpu.arch.ptrBitWidth();
|
||||
|
||||
if (!typed_value.ty.isSlice()) {
|
||||
if (typed_value.val.castTag(.variable)) |payload| {
|
||||
return genDeclRef(bin_file, src_loc, typed_value, payload.data.owner_decl);
|
||||
}
|
||||
if (typed_value.val.castTag(.decl_ref)) |payload| {
|
||||
return genDeclRef(bin_file, src_loc, typed_value, payload.data);
|
||||
}
|
||||
|
||||
@ -1185,7 +1185,6 @@ test "equality of pointers to comptime const" {
|
||||
}
|
||||
|
||||
test "storing an array of type in a field" {
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -128,7 +128,6 @@ fn testReinterpretOverAlignedExternStructAsExternStruct() !void {
|
||||
test "lower reinterpreted comptime field ptr (with under-aligned fields)" {
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
@ -152,7 +151,6 @@ test "lower reinterpreted comptime field ptr (with under-aligned fields)" {
|
||||
test "lower reinterpreted comptime field ptr" {
|
||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user