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:
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);
+}