diff options
| author | Veikka Tuominen <git@vexu.eu> | 2022-08-28 14:00:26 +0300 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2022-08-28 15:41:21 +0300 |
| commit | e2dc77ab62edf5446af830356eceef8eefb67cfa (patch) | |
| tree | ca09907e11ad2b5a10d3e11acf69cae7be220f2d /src/type.zig | |
| parent | 776caaf99927181a2bb135afa9b502014782691c (diff) | |
| download | zig-e2dc77ab62edf5446af830356eceef8eefb67cfa.tar.gz zig-e2dc77ab62edf5446af830356eceef8eefb67cfa.zip | |
Sema: correct one possible value for tuples
Closes #12376
Diffstat (limited to 'src/type.zig')
| -rw-r--r-- | src/type.zig | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/type.zig b/src/type.zig index cc6e5706ee..5ff9da8913 100644 --- a/src/type.zig +++ b/src/type.zig @@ -4979,19 +4979,20 @@ pub const Type = extern union { const s = ty.castTag(.@"struct").?.data; assert(s.haveFieldTypes()); for (s.fields.values()) |field| { - if (field.ty.onePossibleValue() == null) { - return null; - } + if (field.is_comptime) continue; + if (field.ty.onePossibleValue() != null) continue; + return null; } return Value.initTag(.empty_struct_value); }, .tuple, .anon_struct => { const tuple = ty.tupleFields(); - for (tuple.values) |val| { - if (val.tag() == .unreachable_value) { - return null; // non-comptime field - } + for (tuple.values) |val, i| { + const is_comptime = val.tag() != .unreachable_value; + if (is_comptime) continue; + if (tuple.types[i].onePossibleValue() != null) continue; + return null; } return Value.initTag(.empty_struct_value); }, |
