mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 04:48:20 +00:00
stage2: comptime fields should not affect opv/comptime-only
This commit is contained in:
parent
7d0b6956c0
commit
762c4a876b
@ -4092,15 +4092,17 @@ fn structDeclInner(
|
||||
const doc_comment_index = try astgen.docCommentAsString(member.firstToken());
|
||||
wip_members.appendToField(doc_comment_index);
|
||||
|
||||
known_non_opv = known_non_opv or
|
||||
nodeImpliesMoreThanOnePossibleValue(tree, member.ast.type_expr);
|
||||
known_comptime_only = known_comptime_only or
|
||||
nodeImpliesComptimeOnly(tree, member.ast.type_expr);
|
||||
|
||||
const have_align = member.ast.align_expr != 0;
|
||||
const have_value = member.ast.value_expr != 0;
|
||||
const is_comptime = member.comptime_token != null;
|
||||
const unused = false;
|
||||
|
||||
if (!is_comptime) {
|
||||
known_non_opv = known_non_opv or
|
||||
nodeImpliesMoreThanOnePossibleValue(tree, member.ast.type_expr);
|
||||
known_comptime_only = known_comptime_only or
|
||||
nodeImpliesComptimeOnly(tree, member.ast.type_expr);
|
||||
}
|
||||
wip_members.nextField(bits_per_field, .{ have_align, have_value, is_comptime, unused });
|
||||
|
||||
if (have_align) {
|
||||
|
||||
@ -20860,6 +20860,7 @@ pub fn typeHasOnePossibleValue(
|
||||
const resolved_ty = try sema.resolveTypeFields(block, src, ty);
|
||||
const s = resolved_ty.castTag(.@"struct").?.data;
|
||||
for (s.fields.values()) |value| {
|
||||
if (value.is_comptime) continue;
|
||||
if ((try sema.typeHasOnePossibleValue(block, src, value.ty)) == null) {
|
||||
return null;
|
||||
}
|
||||
@ -21532,6 +21533,7 @@ fn typeRequiresComptime(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) C
|
||||
|
||||
struct_obj.requires_comptime = .wip;
|
||||
for (struct_obj.fields.values()) |field| {
|
||||
if (field.is_comptime) continue;
|
||||
if (try sema.typeRequiresComptime(block, src, field.ty)) {
|
||||
struct_obj.requires_comptime = .yes;
|
||||
return true;
|
||||
|
||||
@ -2098,6 +2098,7 @@ pub const Type = extern union {
|
||||
}
|
||||
assert(struct_obj.haveFieldTypes());
|
||||
for (struct_obj.fields.values()) |value| {
|
||||
if (value.is_comptime) continue;
|
||||
if (value.ty.hasRuntimeBitsAdvanced(ignore_comptime_only))
|
||||
return true;
|
||||
} else {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user