aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-02-03 23:57:05 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-02-03 23:59:32 -0700
commit95fbce2b958395a367a82ce33170edd93e686173 (patch)
treedae1e68036754591c53b71571d5b12b3b2f33539 /src/type.zig
parent64f7231f86d4b8a155f48087b3f173d8e41b620c (diff)
downloadzig-95fbce2b958395a367a82ce33170edd93e686173.tar.gz
zig-95fbce2b958395a367a82ce33170edd93e686173.zip
Sema: fixes to fieldVal, resolveStructFully, Type.eql
fieldVal handles pointer to pointer to array. This can happen for example, if a pointer to an array is used as the condition expression of a for loop. resolveStructFully handles tuples (by doing nothing). fixed Type comparison for tuples to handle comptime fields properly.
Diffstat (limited to 'src/type.zig')
-rw-r--r--src/type.zig14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/type.zig b/src/type.zig
index 272d09a921..e3a4b3d60a 100644
--- a/src/type.zig
+++ b/src/type.zig
@@ -634,7 +634,19 @@ pub const Type = extern union {
for (a_payload.data.values) |a_val, i| {
const ty = a_payload.data.types[i];
const b_val = b_payload.data.values[i];
- if (!Value.eql(a_val, b_val, ty)) return false;
+ if (a_val.tag() == .unreachable_value) {
+ if (b_val.tag() == .unreachable_value) {
+ continue;
+ } else {
+ return false;
+ }
+ } else {
+ if (b_val.tag() == .unreachable_value) {
+ return false;
+ } else {
+ if (!Value.eql(a_val, b_val, ty)) return false;
+ }
+ }
}
return true;