diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Module.zig | 8 | ||||
| -rw-r--r-- | src/Sema.zig | 14 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/Module.zig b/src/Module.zig index 4a4f0206d7..42efd32f63 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -4416,7 +4416,9 @@ pub fn analyzeStructFields(mod: *Module, struct_obj: *Struct) InnerError!void { }; defer assert(block.instructions.items.len == 0); // should all be comptime instructions - _ = try sema.analyzeBody(&block, body); + if (body.len != 0) { + _ = try sema.analyzeBody(&block, body); + } const bits_per_field = 4; const fields_per_u32 = 32 / bits_per_field; @@ -4545,7 +4547,9 @@ pub fn analyzeUnionFields(mod: *Module, union_obj: *Union) InnerError!void { }; defer assert(block.instructions.items.len == 0); // should all be comptime instructions - _ = try sema.analyzeBody(&block, body); + if (body.len != 0) { + _ = try sema.analyzeBody(&block, body); + } var auto_enum_tag: ?bool = null; diff --git a/src/Sema.zig b/src/Sema.zig index 3a5de5c789..9427222a46 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -5425,11 +5425,8 @@ fn zirFieldType(sema: *Sema, block: *Scope.Block, inst: Zir.Inst.Index) InnerErr } const struct_ty = try sema.resolveTypeFields(block, src, unresolved_struct_type); const struct_obj = struct_ty.castTag(.@"struct").?.data; - const field = struct_obj.fields.get(field_name) orelse { - return sema.mod.fail(&block.base, src, "no field named '{s}' in struct '{}'", .{ - field_name, struct_ty, - }); - }; + const field = struct_obj.fields.get(field_name) orelse + return sema.failWithBadFieldAccess(block, struct_obj, src, field_name); return sema.mod.constType(sema.arena, src, field.ty); } @@ -6220,13 +6217,14 @@ fn analyzeStructFieldPtr( struct_ptr: *Inst, field_name: []const u8, field_name_src: LazySrcLoc, - elem_ty: Type, + unresolved_struct_ty: Type, ) InnerError!*Inst { const mod = sema.mod; const arena = sema.arena; - assert(elem_ty.zigTypeTag() == .Struct); + assert(unresolved_struct_ty.zigTypeTag() == .Struct); - const struct_obj = elem_ty.castTag(.@"struct").?.data; + const struct_ty = try sema.resolveTypeFields(block, src, unresolved_struct_ty); + const struct_obj = struct_ty.castTag(.@"struct").?.data; const field_index = struct_obj.fields.getIndex(field_name) orelse return sema.failWithBadFieldAccess(block, struct_obj, field_name_src, field_name); |
