aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-08-28 14:00:26 +0300
committerVeikka Tuominen <git@vexu.eu>2022-08-28 15:41:21 +0300
commite2dc77ab62edf5446af830356eceef8eefb67cfa (patch)
treeca09907e11ad2b5a10d3e11acf69cae7be220f2d /src/type.zig
parent776caaf99927181a2bb135afa9b502014782691c (diff)
downloadzig-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.zig15
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);
},