From e2dc77ab62edf5446af830356eceef8eefb67cfa Mon Sep 17 00:00:00 2001 From: Veikka Tuominen Date: Sun, 28 Aug 2022 14:00:26 +0300 Subject: Sema: correct one possible value for tuples Closes #12376 --- src/Sema.zig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/Sema.zig') diff --git a/src/Sema.zig b/src/Sema.zig index 586f1b2ee8..1030fe0473 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -22248,8 +22248,7 @@ fn tupleField( if (try sema.resolveMaybeUndefVal(block, tuple_src, tuple)) |tuple_val| { if (tuple_val.isUndef()) return sema.addConstUndef(field_ty); - const field_values = tuple_val.castTag(.aggregate).?.data; - return sema.addConstant(field_ty, field_values[field_index]); + return sema.addConstant(field_ty, tuple_val.fieldValue(tuple_ty, field_index)); } try sema.validateRuntimeElemAccess(block, field_index_src, field_ty, tuple_ty, tuple_src); @@ -28848,10 +28847,11 @@ pub fn typeHasOnePossibleValue( .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 ((try sema.typeHasOnePossibleValue(block, src, tuple.types[i])) != null) continue; + return null; } return Value.initTag(.empty_struct_value); }, -- cgit v1.2.3