mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
add missing resolveStructFieldInits
This commit is contained in:
parent
ca4ee9ae73
commit
d03649ec2f
12
src/Sema.zig
12
src/Sema.zig
@ -5041,6 +5041,8 @@ fn zirValidatePtrArrayInit(
|
||||
// Determine whether the value stored to this pointer is comptime-known.
|
||||
|
||||
if (array_ty.isTuple(mod)) {
|
||||
if (array_ty.structFieldIsComptime(i, mod))
|
||||
try sema.resolveStructFieldInits(array_ty);
|
||||
if (try array_ty.structFieldValueComptime(mod, i)) |opv| {
|
||||
element_vals[i] = opv.toIntern();
|
||||
continue;
|
||||
@ -27059,6 +27061,8 @@ fn tupleFieldValByIndex(
|
||||
const mod = sema.mod;
|
||||
const field_ty = tuple_ty.structFieldType(field_index, mod);
|
||||
|
||||
if (tuple_ty.structFieldIsComptime(field_index, mod))
|
||||
try sema.resolveStructFieldInits(tuple_ty);
|
||||
if (try tuple_ty.structFieldValueComptime(mod, field_index)) |default_value| {
|
||||
return Air.internedToRef(default_value.toIntern());
|
||||
}
|
||||
@ -27078,10 +27082,6 @@ fn tupleFieldValByIndex(
|
||||
};
|
||||
}
|
||||
|
||||
if (try tuple_ty.structFieldValueComptime(mod, field_index)) |default_val| {
|
||||
return Air.internedToRef(default_val.toIntern());
|
||||
}
|
||||
|
||||
try sema.requireRuntimeBlock(block, src, null);
|
||||
try sema.resolveTypeLayout(field_ty);
|
||||
return block.addStructFieldVal(tuple_byval, field_index, field_ty);
|
||||
@ -27506,6 +27506,8 @@ fn tupleFieldPtr(
|
||||
},
|
||||
});
|
||||
|
||||
if (tuple_ty.structFieldIsComptime(field_index, mod))
|
||||
try sema.resolveStructFieldInits(tuple_ty);
|
||||
if (try tuple_ty.structFieldValueComptime(mod, field_index)) |default_val| {
|
||||
return Air.internedToRef((try mod.intern(.{ .ptr = .{
|
||||
.ty = ptr_field_ty.toIntern(),
|
||||
@ -27556,6 +27558,8 @@ fn tupleField(
|
||||
|
||||
const field_ty = tuple_ty.structFieldType(field_index, mod);
|
||||
|
||||
if (tuple_ty.structFieldIsComptime(field_index, mod))
|
||||
try sema.resolveStructFieldInits(tuple_ty);
|
||||
if (try tuple_ty.structFieldValueComptime(mod, field_index)) |default_value| {
|
||||
return Air.internedToRef(default_value.toIntern()); // comptime field
|
||||
}
|
||||
|
||||
@ -480,3 +480,11 @@ test "empty tuple type" {
|
||||
const s: S = .{};
|
||||
try expect(s.len == 0);
|
||||
}
|
||||
|
||||
test "tuple with comptime fields with non empty initializer" {
|
||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
|
||||
if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
|
||||
|
||||
const a: struct { comptime comptime_int = 0 } = .{0};
|
||||
_ = a;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user