diff --git a/lib/std/zig/number_literal.zig b/lib/std/zig/number_literal.zig index 754fefafb586a3674e9e278b094a875f29174979..45be08e0de9b63df8aff4a07661571121ac02f2f 100644 --- a/lib/std/zig/number_literal.zig +++ b/lib/std/zig/number_literal.zig @@ -123,7 +123,7 @@ pub fn parseNumberLiteral(bytes: []const u8) Result { '.' => { if (exponent) return .{ .failure = .{ .period_after_exponent = i } }; float = true; - if (base != 10 and base != 16) return .{ .failure = .{ .invalid_float_base = 2 } }; + if (base != 10 and base != 16) return .{ .failure = .{ .invalid_float_base = 1 } }; if (period) return .{ .failure = .duplicate_period }; period = true; if (underscore) return .{ .failure = .{ .special_after_underscore = i } }; @@ -177,6 +177,7 @@ test parseNumberLiteral { try std.testing.expectEqual(Result{ .failure = .{ .period_after_exponent = 3 } }, parseNumberLiteral("3E2.5")); try std.testing.expectEqual(Result{ .failure = .{ .period_after_exponent = 2 } }, parseNumberLiteral("3E.5")); try std.testing.expectEqual(Result{ .failure = .{ .period_after_exponent = 3 } }, parseNumberLiteral("3E1.")); + try std.testing.expectEqual(Result{ .failure = .{ .invalid_float_base = 1 } }, parseNumberLiteral("0o3.1")); try std.testing.expectEqual(Result{ .failure = .{ .invalid_digit = .{ .i = 3, .base = .octal } } }, parseNumberLiteral("0o3e1")); } diff --git a/test/cases/compile_errors/invalid_number_literals.zig b/test/cases/compile_errors/invalid_number_literals.zig index 5732c2bd44d8ee01cbc3a753a7aafbeb8d82e407..bd69a046e853fe2bee464901efb1bedb884cb314 100644 --- a/test/cases/compile_errors/invalid_number_literals.zig +++ b/test/cases/compile_errors/invalid_number_literals.zig @@ -19,6 +19,9 @@ comptime { comptime { _ = 0xP0; } +comptime { + _ = 0o1.0; +} // error // @@ -29,3 +32,4 @@ comptime { // :14:13: error: unexpected period after exponent // :17:9: error: expected a digit after base prefix // :20:9: error: expected a digit after base prefix +// :23:10: error: invalid base for float literal