| author | |
| committer | |
| log | 762c4a876bfa999d5f49edc7bbaf2917c06d320d |
| tree | 1730fd0074aaf13b79d04ce83d6b3286844343f1 |
| parent | 7d0b6956c0935807f0e5862c45da857e8e065c6b |
3 files changed, 10 insertions(+), 5 deletions(-)
src/AstGen.zig+7-5| ... | @@ -4092,15 +4092,17 @@ fn structDeclInner( | ... | @@ -4092,15 +4092,17 @@ fn structDeclInner( |
| 4092 | const doc_comment_index = try astgen.docCommentAsString(member.firstToken()); | 4092 | const doc_comment_index = try astgen.docCommentAsString(member.firstToken()); |
| 4093 | wip_members.appendToField(doc_comment_index); | 4093 | wip_members.appendToField(doc_comment_index); |
| 4094 | 4094 | ||
| 4095 | known_non_opv = known_non_opv or | ||
| 4096 | nodeImpliesMoreThanOnePossibleValue(tree, member.ast.type_expr); | ||
| 4097 | known_comptime_only = known_comptime_only or | ||
| 4098 | nodeImpliesComptimeOnly(tree, member.ast.type_expr); | ||
| 4099 | |||
| 4100 | const have_align = member.ast.align_expr != 0; | 4095 | const have_align = member.ast.align_expr != 0; |
| 4101 | const have_value = member.ast.value_expr != 0; | 4096 | const have_value = member.ast.value_expr != 0; |
| 4102 | const is_comptime = member.comptime_token != null; | 4097 | const is_comptime = member.comptime_token != null; |
| 4103 | const unused = false; | 4098 | const unused = false; |
| 4099 | |||
| 4100 | if (!is_comptime) { | ||
| 4101 | known_non_opv = known_non_opv or | ||
| 4102 | nodeImpliesMoreThanOnePossibleValue(tree, member.ast.type_expr); | ||
| 4103 | known_comptime_only = known_comptime_only or | ||
| 4104 | nodeImpliesComptimeOnly(tree, member.ast.type_expr); | ||
| 4105 | } | ||
| 4104 | wip_members.nextField(bits_per_field, .{ have_align, have_value, is_comptime, unused }); | 4106 | wip_members.nextField(bits_per_field, .{ have_align, have_value, is_comptime, unused }); |
| 4105 | 4107 | ||
| 4106 | if (have_align) { | 4108 | if (have_align) { |
src/Sema.zig+2| ... | @@ -20860,6 +20860,7 @@ pub fn typeHasOnePossibleValue( | ... | @@ -20860,6 +20860,7 @@ pub fn typeHasOnePossibleValue( |
| 20860 | const resolved_ty = try sema.resolveTypeFields(block, src, ty); | 20860 | const resolved_ty = try sema.resolveTypeFields(block, src, ty); |
| 20861 | const s = resolved_ty.castTag(.@"struct").?.data; | 20861 | const s = resolved_ty.castTag(.@"struct").?.data; |
| 20862 | for (s.fields.values()) |value| { | 20862 | for (s.fields.values()) |value| { |
| 20863 | if (value.is_comptime) continue; | ||
| 20863 | if ((try sema.typeHasOnePossibleValue(block, src, value.ty)) == null) { | 20864 | if ((try sema.typeHasOnePossibleValue(block, src, value.ty)) == null) { |
| 20864 | return null; | 20865 | return null; |
| 20865 | } | 20866 | } |
| ... | @@ -21532,6 +21533,7 @@ fn typeRequiresComptime(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) C | ... | @@ -21532,6 +21533,7 @@ fn typeRequiresComptime(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) C |
| 21532 | 21533 | ||
| 21533 | struct_obj.requires_comptime = .wip; | 21534 | struct_obj.requires_comptime = .wip; |
| 21534 | for (struct_obj.fields.values()) |field| { | 21535 | for (struct_obj.fields.values()) |field| { |
| 21536 | if (field.is_comptime) continue; | ||
| 21535 | if (try sema.typeRequiresComptime(block, src, field.ty)) { | 21537 | if (try sema.typeRequiresComptime(block, src, field.ty)) { |
| 21536 | struct_obj.requires_comptime = .yes; | 21538 | struct_obj.requires_comptime = .yes; |
| 21537 | return true; | 21539 | return true; |
src/type.zig+1| ... | @@ -2098,6 +2098,7 @@ pub const Type = extern union { | ... | @@ -2098,6 +2098,7 @@ pub const Type = extern union { |
| 2098 | } | 2098 | } |
| 2099 | assert(struct_obj.haveFieldTypes()); | 2099 | assert(struct_obj.haveFieldTypes()); |
| 2100 | for (struct_obj.fields.values()) |value| { | 2100 | for (struct_obj.fields.values()) |value| { |
| 2101 | if (value.is_comptime) continue; | ||
| 2101 | if (value.ty.hasRuntimeBitsAdvanced(ignore_comptime_only)) | 2102 | if (value.ty.hasRuntimeBitsAdvanced(ignore_comptime_only)) |
| 2102 | return true; | 2103 | return true; |
| 2103 | } else { | 2104 | } else { |