zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit edebe0586bd0cb73ef8492fd569e1c2fc7aca05b (tree)
parent ecb77af5343c58bbd8023ded0ebf241abe1b0dfa
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Sat,  7 Dec 2019 13:03:43 -0500

remove compile error for peer result comptime_int and null

closes #2763

Diffstat:
Msrc/ir.cpp | 8+-------
Mtest/stage1/behavior/cast.zig | 21+++++++++++++++++++++
2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/ir.cpp b/src/ir.cpp @@ -11438,13 +11438,7 @@ static ZigType *ir_resolve_peer_types(IrAnalyze *ira, AstNode *source_node, ZigT } } } else if (any_are_null && prev_inst->value->type->id != ZigTypeIdNull) { - if (prev_inst->value->type->id == ZigTypeIdComptimeInt || - prev_inst->value->type->id == ZigTypeIdComptimeFloat) - { - ir_add_error_node(ira, source_node, - buf_sprintf("unable to make maybe out of number literal")); - return ira->codegen->builtin_types.entry_invalid; - } else if (prev_inst->value->type->id == ZigTypeIdOptional) { + if (prev_inst->value->type->id == ZigTypeIdOptional) { return prev_inst->value->type; } else { if ((err = type_resolve(ira->codegen, prev_inst->value->type, ResolveStatusSizeKnown))) diff --git a/test/stage1/behavior/cast.zig b/test/stage1/behavior/cast.zig @@ -710,3 +710,24 @@ test "return u8 coercing into ?u32 return type" { S.doTheTest(); comptime S.doTheTest(); } + +test "peer result null and comptime_int" { + const S = struct { + fn blah(n: i32) ?i32 { + if (n == 0) { + return null; + } else if (n < 0) { + return -1; + } else { + return 1; + } + } + }; + + expect(S.blah(0) == null); + comptime expect(S.blah(0) == null); + expect(S.blah(10).? == 1); + comptime expect(S.blah(10).? == 1); + expect(S.blah(-10).? == -1); + comptime expect(S.blah(-10).? == -1); +}