diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-06-26 00:36:24 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-06-26 00:36:24 -0400 |
| commit | b4e40cb59a4d8ee498a0ae5b892bb5907745dc1e (patch) | |
| tree | 52752524a9944de937e76c7d27033aad52d9516b | |
| parent | fd4c5f54f05c598c83188409afffea37d4334949 (diff) | |
| download | zig-b4e40cb59a4d8ee498a0ae5b892bb5907745dc1e.tar.gz zig-b4e40cb59a4d8ee498a0ae5b892bb5907745dc1e.zip | |
fix peer type resolution with null
| -rw-r--r-- | src/ir.cpp | 1 | ||||
| -rw-r--r-- | test/stage1/behavior/cast.zig | 14 |
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"); +} |
