aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-07-26 13:20:29 +0300
committerVeikka Tuominen <git@vexu.eu>2022-07-26 16:40:24 +0300
commitd78532f462b2d0b514bbd3c1c3ed36135dca766c (patch)
tree10945487823a276103345053ffd73922a2bce24f /src
parent20ea44ef107828d76692e610e1ca62ee231fb4a9 (diff)
downloadzig-d78532f462b2d0b514bbd3c1c3ed36135dca766c.tar.gz
zig-d78532f462b2d0b514bbd3c1c3ed36135dca766c.zip
Sema: give comptime_field_ptr priority over field_ptr in tuples
Closes #11983
Diffstat (limited to 'src')
-rw-r--r--src/Sema.zig26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index ffe57c4a1b..57de32396d 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -20499,6 +20499,14 @@ fn tupleFieldPtr(
.@"addrspace" = tuple_ptr_ty.ptrAddressSpace(),
});
+ if (tuple_ty.structFieldValueComptime(field_index)) |default_val| {
+ const val = try Value.Tag.comptime_field_ptr.create(sema.arena, .{
+ .field_ty = field_ty,
+ .field_val = default_val,
+ });
+ return sema.addConstant(ptr_field_ty, val);
+ }
+
if (try sema.resolveMaybeUndefVal(block, tuple_ptr_src, tuple_ptr)) |tuple_ptr_val| {
return sema.addConstant(
ptr_field_ty,
@@ -20510,14 +20518,6 @@ fn tupleFieldPtr(
);
}
- if (tuple_ty.structFieldValueComptime(field_index)) |default_val| {
- const val = try Value.Tag.comptime_field_ptr.create(sema.arena, .{
- .field_ty = field_ty,
- .field_val = default_val,
- });
- return sema.addConstant(ptr_field_ty, val);
- }
-
if (!init) {
try sema.validateRuntimeElemAccess(block, field_index_src, field_ty, tuple_ty, tuple_ptr_src);
}
@@ -23241,6 +23241,16 @@ fn beginComptimePtrLoad(
break :blk deref;
},
+ .comptime_field_ptr => blk: {
+ const comptime_field_ptr = ptr_val.castTag(.comptime_field_ptr).?.data;
+ break :blk ComptimePtrLoadKit{
+ .parent = null,
+ .pointee = .{ .ty = comptime_field_ptr.field_ty, .val = comptime_field_ptr.field_val },
+ .is_mutable = false,
+ .ty_without_well_defined_layout = comptime_field_ptr.field_ty,
+ };
+ },
+
.opt_payload_ptr,
.eu_payload_ptr,
=> blk: {