aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2023-01-16 14:16:47 +0200
committerVeikka Tuominen <git@vexu.eu>2023-01-17 20:28:43 +0200
commit8b35f09f4ae29eb2768d47e8a8bae0f4131d6bad (patch)
treeef55b1531dcc83b33e76f71847d88c57f13d56ea
parent6b037bad590bd6c319af336b6d3017c33d6834ba (diff)
downloadzig-8b35f09f4ae29eb2768d47e8a8bae0f4131d6bad.tar.gz
zig-8b35f09f4ae29eb2768d47e8a8bae0f4131d6bad.zip
Sema: resolve lazy values in switch prong items
Closes #14330
-rw-r--r--src/Sema.zig1
-rw-r--r--test/behavior/switch.zig14
2 files changed, 15 insertions, 0 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 4e479d263a..21e6fd14be 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -11288,6 +11288,7 @@ fn resolveSwitchItemVal(
// Only if we know for sure we need to report a compile error do we resolve the
// full source locations.
if (sema.resolveConstValue(block, .unneeded, item, "")) |val| {
+ try sema.resolveLazyValue(val);
return TypedValue{ .ty = item_ty, .val = val };
} else |err| switch (err) {
error.NeededSourceLocation => {
diff --git a/test/behavior/switch.zig b/test/behavior/switch.zig
index 3bb9c35a4e..b8c367eb44 100644
--- a/test/behavior/switch.zig
+++ b/test/behavior/switch.zig
@@ -686,3 +686,17 @@ test "enum value without tag name used as switch item" {
_ => return error.TestFailed,
}
}
+
+test "switch item sizeof" {
+ const S = struct {
+ fn doTheTest() !void {
+ var a: usize = 0;
+ switch (a) {
+ @sizeOf(struct {}) => {},
+ else => return error.TestFailed,
+ }
+ }
+ };
+ try S.doTheTest();
+ comptime try S.doTheTest();
+}