diff --git a/src/codegen.cpp b/src/codegen.cpp index 1a166867a8..ee8dcac715 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -1269,6 +1269,9 @@ static LLVMValueRef gen_cmp_expr(CodeGen *g, AstNode *node) { } else { zig_unreachable(); } + } else if (op1_type->id == TypeTableEntryIdPureError) { + LLVMIntPredicate pred = cmp_op_to_int_predicate(node->data.bin_op_expr.bin_op, false); + return LLVMBuildICmp(g->builder, pred, val1, val2, ""); } else { zig_unreachable(); } diff --git a/std/std.zig b/std/std.zig index d82d78bf49..1333b5be39 100644 --- a/std/std.zig +++ b/std/std.zig @@ -158,7 +158,7 @@ pub fn parse_u64(buf: []u8, radix: u8) -> %u64 { for (buf) |c| { const digit = char_to_digit(c); - if (digit > radix) { + if (digit >= radix) { return error.InvalidChar; } @@ -342,3 +342,12 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize { len } + +#attribute("test") +fn parse_u64_digit_too_big() { + parse_u64("123a", 10) %% |err| { + if (err == error.InvalidChar) return; + unreachable{}; + }; + unreachable{}; +} diff --git a/test/self_hosted.zig b/test/self_hosted.zig index dfab9816b0..7a73807743 100644 --- a/test/self_hosted.zig +++ b/test/self_hosted.zig @@ -1,3 +1,5 @@ +import "test_std.zig"; + #attribute("test") fn empty_function() {} diff --git a/test/test_std.zig b/test/test_std.zig new file mode 100644 index 0000000000..342d7e15a7 --- /dev/null +++ b/test/test_std.zig @@ -0,0 +1 @@ +import "std.zig";