aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-05-24 18:20:03 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-05-24 18:20:03 -0700
commita4ff94804cfcdee49fb9c70812c15ff7d2829ee5 (patch)
tree34b3ed6ff9b836a5160f74216da68d008f010042 /src
parent1f16b07d6fe43f96287b6cca8e8b58996199481f (diff)
downloadzig-a4ff94804cfcdee49fb9c70812c15ff7d2829ee5.tar.gz
zig-a4ff94804cfcdee49fb9c70812c15ff7d2829ee5.zip
Sema: additional check for one-possible-value types in analyzeLoad
This is needed because pointers to zero-bit types are not necessarily comptime known, but when doing a load, only the element type having one possible value is relevant.
Diffstat (limited to 'src')
-rw-r--r--src/Sema.zig5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index e625539286..cf9b5aa57f 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -20950,6 +20950,11 @@ fn analyzeLoad(
.Pointer => ptr_ty.childType(),
else => return sema.fail(block, ptr_src, "expected pointer, found '{}'", .{ptr_ty.fmt(sema.mod)}),
};
+
+ if (try sema.typeHasOnePossibleValue(block, src, elem_ty)) |opv| {
+ return sema.addConstant(elem_ty, opv);
+ }
+
if (try sema.resolveDefinedValue(block, ptr_src, ptr)) |ptr_val| {
if (try sema.pointerDeref(block, ptr_src, ptr_val, ptr_ty)) |elem_val| {
return sema.addConstant(elem_ty, elem_val);