diff options
| author | jacobly0 <jacobly0@users.noreply.github.com> | 2022-10-12 05:40:59 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-12 12:40:59 +0300 |
| commit | 562ac8be48e4a08358da73e556e331e3618f8b4b (patch) | |
| tree | 3495e59a81924c3a8ff12b8948fe069f01f104cc /src/codegen.zig | |
| parent | b47e54ed3f6e5d93fff8a2327c88c903cc0a194c (diff) | |
| download | zig-562ac8be48e4a08358da73e556e331e3618f8b4b.tar.gz zig-562ac8be48e4a08358da73e556e331e3618f8b4b.zip | |
codegen: add support for lowering .field_ptr on a slice
Closes #13068
Diffstat (limited to 'src/codegen.zig')
| -rw-r--r-- | src/codegen.zig | 14 |
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, |
