mirror of
https://github.com/ziglang/zig.git
synced 2026-02-12 20:37:54 +00:00
stage2: fix struct inits not getting fields resolved
This commit is contained in:
parent
73bf53069d
commit
28353b3159
@ -1,3 +1,5 @@
|
||||
* structs, unions, enums, etc get weird names such as "Point__anon_22" rather
|
||||
than "Point".
|
||||
* get stage2 tests passing
|
||||
* modify stage2 tests so that only 1 uses _start and the rest use
|
||||
pub fn main
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
14
src/Sema.zig
14
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);
|
||||
|
||||
@ -516,7 +516,7 @@ pub fn addCases(ctx: *TestContext) !void {
|
||||
\\ return p.y - p.x - p.x;
|
||||
\\}
|
||||
, &.{
|
||||
":3:21: error: mising struct field: x",
|
||||
":3:21: error: missing struct field: x",
|
||||
":1:15: note: struct 'Point' declared here",
|
||||
});
|
||||
case.addError(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user