aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index f5340458a5..e7f927a2d6 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -363,11 +363,21 @@ pub fn generateSymbol(
const mod = bin_file.options.module.?;
const decl = mod.declPtr(decl_index);
const addend = blk: {
- switch (decl.ty.tag()) {
- .@"struct" => {
+ switch (decl.ty.zigTypeTag()) {
+ .Struct => {
const addend = decl.ty.structFieldOffset(field_ptr.field_index, target);
break :blk @intCast(u32, addend);
},
+ .Pointer => {
+ assert(decl.ty.isSlice());
+ var buf: Type.SlicePtrFieldTypeBuffer = undefined;
+ const addend = switch (field_ptr.field_index) {
+ 0 => 0,
+ 1 => decl.ty.slicePtrFieldType(&buf).abiSize(target),
+ else => unreachable,
+ };
+ break :blk @intCast(u32, addend);
+ },
else => return Result{
.fail = try ErrorMsg.create(
bin_file.allocator,