aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2023-02-02 14:39:13 +0200
committerVeikka Tuominen <git@vexu.eu>2023-02-11 14:36:54 +0200
commit31ed8d293ddb79d34306e0b23e76d8a361c8856f (patch)
tree6058e6849762e925518b5b64cbf800643f248290 /src
parentb9c2837c1c9eddc903aeeb168b8d2daa48837ddb (diff)
downloadzig-31ed8d293ddb79d34306e0b23e76d8a361c8856f.tar.gz
zig-31ed8d293ddb79d34306e0b23e76d8a361c8856f.zip
Sema: add missing peer type resolution for error unions
Closes #14077
Diffstat (limited to 'src')
-rw-r--r--src/Sema.zig19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 2dba678931..ddcdecb6b4 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -29761,6 +29761,25 @@ fn resolvePeerTypes(
continue;
}
},
+ .ErrorSet => {
+ chosen = candidate;
+ chosen_i = candidate_i + 1;
+ if (err_set_ty) |chosen_set_ty| {
+ if (.ok == try sema.coerceInMemoryAllowedErrorSets(block, chosen_set_ty, chosen_ty, src, src)) {
+ continue;
+ }
+ if (.ok == try sema.coerceInMemoryAllowedErrorSets(block, chosen_ty, chosen_set_ty, src, src)) {
+ err_set_ty = chosen_ty;
+ continue;
+ }
+
+ err_set_ty = try chosen_set_ty.errorSetMerge(sema.arena, chosen_ty);
+ continue;
+ } else {
+ err_set_ty = chosen_ty;
+ continue;
+ }
+ },
else => {},
}