diff options
| author | Isaac Freund <mail@isaacfreund.com> | 2023-02-20 23:31:48 +0100 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-02-21 15:57:13 +0200 |
| commit | 05da5b32a820c031001098034840940964f41a81 (patch) | |
| tree | ad6dfd90922e168d536f8adba3f97af2e1843e31 /src/codegen/c.zig | |
| parent | dc1f50e505105cabe1ed53951ca612778d6019ee (diff) | |
| download | zig-05da5b32a820c031001098034840940964f41a81.tar.gz zig-05da5b32a820c031001098034840940964f41a81.zip | |
Sema: implement @fieldParentPtr for unions
Diffstat (limited to 'src/codegen/c.zig')
| -rw-r--r-- | src/codegen/c.zig | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 0beb00b236..399549da3a 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -5367,12 +5367,18 @@ fn airFieldParentPtr(f: *Function, inst: Air.Inst.Index) !CValue { } const struct_ptr_ty = f.air.typeOfIndex(inst); + const field_ptr_ty = f.air.typeOf(extra.field_ptr); const field_ptr_val = try f.resolveInst(extra.field_ptr); try reap(f, inst, &.{extra.field_ptr}); const target = f.object.dg.module.getTarget(); const struct_ty = struct_ptr_ty.childType(); + + if (struct_ty.zigTypeTag() == .Union) { + return f.fail("TODO: CBE: @fieldParentPtr for unions", .{}); + } + const field_offset = struct_ty.structFieldOffset(extra.field_index, target); var field_offset_pl = Value.Payload.I64{ |
