aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-07-22 13:20:18 +0300
committerVeikka Tuominen <git@vexu.eu>2022-07-23 15:40:12 +0300
commit15dddfd84d9007689ef1fa6f4abedb88c570973a (patch)
tree0d938db7ae94ac24235cad9656a70958832e5ea1 /src/Sema.zig
parent0ef4cc738b9c023c1128e3767919b446c959955a (diff)
downloadzig-15dddfd84d9007689ef1fa6f4abedb88c570973a.tar.gz
zig-15dddfd84d9007689ef1fa6f4abedb88c570973a.zip
AstGen: make comptime fields in packed and extern structs compile errors
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index fd630e88bf..ecb387ed34 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -14509,6 +14509,7 @@ fn zirStructInit(
var field_i: u32 = 0;
var extra_index = extra.end;
+ const is_packed = resolved_ty.containerLayout() == .Packed;
while (field_i < extra.data.fields_len) : (field_i += 1) {
const item = sema.code.extraData(Zir.Inst.StructInit.Item, extra_index);
extra_index = item.end;
@@ -14535,7 +14536,7 @@ fn zirStructInit(
}
found_fields[field_index] = item.data.field_type;
field_inits[field_index] = try sema.resolveInst(item.data.init);
- if (resolved_ty.structFieldValueComptime(field_index)) |default_value| {
+ if (!is_packed) if (resolved_ty.structFieldValueComptime(field_index)) |default_value| {
const init_val = (try sema.resolveMaybeUndefVal(block, field_src, field_inits[field_index])) orelse {
return sema.failWithNeededComptime(block, field_src, "value stored in comptime field must be comptime known");
};
@@ -14544,7 +14545,7 @@ fn zirStructInit(
// TODO add note showing where default value is provided
return sema.fail(block, field_src, "value stored in comptime field does not match the default value of the field", .{});
}
- }
+ };
}
return sema.finishStructInit(block, src, src, field_inits, resolved_ty, is_ref);