diff --git a/src/AstGen.zig b/src/AstGen.zig index c3e94ef631..60a7f54e54 100644 --- a/src/AstGen.zig +++ b/src/AstGen.zig @@ -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) { diff --git a/src/Sema.zig b/src/Sema.zig index 8c81f96edf..55d33d47e1 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -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; diff --git a/src/type.zig b/src/type.zig index 2df7cc83d8..ffa43d32c0 100644 --- a/src/type.zig +++ b/src/type.zig @@ -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 {