aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.zig
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-03-25 02:37:31 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2023-03-25 16:23:55 -0400
commitd9ce69dc3949fb11c43520096001b7f06e1a96f3 (patch)
tree52924672c6b62c907ad742c42ceaf1a92a34e1f2 /src/codegen.zig
parent3ece9758574e600c1d97add143c24fefed3d2d82 (diff)
downloadzig-d9ce69dc3949fb11c43520096001b7f06e1a96f3.tar.gz
zig-d9ce69dc3949fb11c43520096001b7f06e1a96f3.zip
codegen: fix ptr-like optional constants
Diffstat (limited to 'src/codegen.zig')
-rw-r--r--src/codegen.zig5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/codegen.zig b/src/codegen.zig
index c48200e845..a99ff18dfd 100644
--- a/src/codegen.zig
+++ b/src/codegen.zig
@@ -1063,13 +1063,12 @@ pub fn genTypedValue(
},
.Optional => {
if (typed_value.ty.isPtrLikeOptional()) {
- if (typed_value.val.isNull())
- return GenResult.mcv(.{ .immediate = 0 });
+ if (typed_value.val.tag() == .null_value) return GenResult.mcv(.{ .immediate = 0 });
var buf: Type.Payload.ElemType = undefined;
return genTypedValue(bin_file, src_loc, .{
.ty = typed_value.ty.optionalChild(&buf),
- .val = typed_value.val,
+ .val = if (typed_value.val.castTag(.opt_payload)) |pl| pl.data else typed_value.val,
}, owner_decl_index);
} else if (typed_value.ty.abiSize(target) == 1) {
return GenResult.mcv(.{ .immediate = @boolToInt(!typed_value.val.isNull()) });