aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-11-05 12:51:32 +0200
committerVeikka Tuominen <git@vexu.eu>2022-11-05 13:22:21 +0200
commit5d28d171dffd5a03276e04ec7089593e967630df (patch)
treebb2bc9117040ccc00c212ec42cff4a436311c935 /src
parentea48f06fc2965ff2e9516c23e58a50a9db5da84b (diff)
downloadzig-5d28d171dffd5a03276e04ec7089593e967630df.tar.gz
zig-5d28d171dffd5a03276e04ec7089593e967630df.zip
Sema: adjust result type of anyerror field access
Closes #13448
Diffstat (limited to 'src')
-rw-r--r--src/Sema.zig10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index e453d0d9e0..d9f514a6e7 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -22475,7 +22475,10 @@ fn fieldVal(
} else (try sema.mod.getErrorValue(field_name)).key;
return sema.addConstant(
- try child_type.copy(arena),
+ if (!child_type.isAnyError())
+ try child_type.copy(arena)
+ else
+ try Type.Tag.error_set_single.create(arena, name),
try Value.Tag.@"error".create(arena, .{ .name = name }),
);
},
@@ -22686,7 +22689,10 @@ fn fieldPtr(
var anon_decl = try block.startAnonDecl(src);
defer anon_decl.deinit();
return sema.analyzeDeclRef(try anon_decl.finish(
- try child_type.copy(anon_decl.arena()),
+ if (!child_type.isAnyError())
+ try child_type.copy(anon_decl.arena())
+ else
+ try Type.Tag.error_set_single.create(anon_decl.arena(), name),
try Value.Tag.@"error".create(anon_decl.arena(), .{ .name = name }),
0, // default alignment
));