aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-09-10 00:53:26 +0300
committerVeikka Tuominen <git@vexu.eu>2022-09-15 00:50:18 +0300
commit5e4483fff8077ec8d87ba9125f946955a34b6fc0 (patch)
treed3c03ca0b8197aaf3f9163deb5ac13910bff19b5 /src/Sema.zig
parent5e37da6ade7eb307d51c21a2dfcdbef23e9cbf08 (diff)
downloadzig-5e4483fff8077ec8d87ba9125f946955a34b6fc0.tar.gz
zig-5e4483fff8077ec8d87ba9125f946955a34b6fc0.zip
Sema: handle comptime fields in field call bind
Closes #12801
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 2cec686989..bcac427caf 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -21683,12 +21683,19 @@ fn finishFieldCallBind(
.@"addrspace" = ptr_ty.ptrAddressSpace(),
});
+ const container_ty = ptr_ty.childType();
+ if (container_ty.zigTypeTag() == .Struct) {
+ if (container_ty.structFieldValueComptime(field_index)) |default_val| {
+ return sema.addConstant(field_ty, default_val);
+ }
+ }
+
if (try sema.resolveDefinedValue(block, src, object_ptr)) |struct_ptr_val| {
const pointer = try sema.addConstant(
ptr_field_ty,
try Value.Tag.field_ptr.create(arena, .{
.container_ptr = struct_ptr_val,
- .container_ty = ptr_ty.childType(),
+ .container_ty = container_ty,
.field_index = field_index,
}),
);