aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-06-26 00:36:24 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-06-26 00:36:24 -0400
commitb4e40cb59a4d8ee498a0ae5b892bb5907745dc1e (patch)
tree52752524a9944de937e76c7d27033aad52d9516b
parentfd4c5f54f05c598c83188409afffea37d4334949 (diff)
downloadzig-b4e40cb59a4d8ee498a0ae5b892bb5907745dc1e.tar.gz
zig-b4e40cb59a4d8ee498a0ae5b892bb5907745dc1e.zip
fix peer type resolution with null
-rw-r--r--src/ir.cpp1
-rw-r--r--test/stage1/behavior/cast.zig14
2 files changed, 15 insertions, 0 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index fb2f9f4980..d6fdcd28ed 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -10399,6 +10399,7 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT
if (prev_type->id == ZigTypeIdNull) {
prev_inst = cur_inst;
+ any_are_null = true;
continue;
}
diff --git a/test/stage1/behavior/cast.zig b/test/stage1/behavior/cast.zig
index 0a2ffb6c2f..5f702ff3e3 100644
--- a/test/stage1/behavior/cast.zig
+++ b/test/stage1/behavior/cast.zig
@@ -482,3 +482,17 @@ test "@intCast to u0 and use the result" {
S.doTheTest(0, 1, 0);
comptime S.doTheTest(0, 1, 0);
}
+
+test "peer type resolution: unreachable, null, slice" {
+ const S = struct {
+ fn doTheTest(num: usize, word: []const u8) void {
+ const result = switch (num) {
+ 0 => null,
+ 1 => word,
+ else => unreachable,
+ };
+ expect(mem.eql(u8, result.?, "hi"));
+ }
+ };
+ S.doTheTest(1, "hi");
+}