diff --git a/lib/std/zig/AstGen.zig b/lib/std/zig/AstGen.zig index 06621ea29e1ca672a904ebf7e47546f3a4d823a4..b9de0ee6ee2eead54e661e927e3d726033156a29 100644 --- a/lib/std/zig/AstGen.zig +++ b/lib/std/zig/AstGen.zig @@ -8069,14 +8069,6 @@ fn identifier( if (std.mem.eql(u8, ident_name_raw, "i0")) { return astgen.failNode(ident, "signed integer cannot have bit width 0", .{}); } - if (ident_name_raw[1] == '0') { - assert(ident_name_raw.len >= 3); // `u0` and `i0` handled - return astgen.failNode( - ident, - "primitive integer type '{s}' has leading zero", - .{ident_name_raw}, - ); - } const bit_count = parseBitCount(ident_name_raw[1..]) catch |err| switch (err) { error.Overflow => return astgen.failNode( ident, @@ -8085,6 +8077,14 @@ fn identifier( ), error.InvalidCharacter => break :int_type, }; + if (ident_name_raw[1] == '0') { + assert(ident_name_raw.len >= 3); // `u0` and `i0` handled + return astgen.failNode( + ident, + "primitive integer type '{s}' has leading zero", + .{ident_name_raw}, + ); + } const result = try gz.add(.{ .tag = .int_type, .data = .{ .int_type = .{ diff --git a/test/behavior/basic.zig b/test/behavior/basic.zig index 2c5e6ab9a9c65ca28d72d60b32c0f100e9a4824b..33df2caa3a65b32605426cf085353ad65a0801f5 100644 --- a/test/behavior/basic.zig +++ b/test/behavior/basic.zig @@ -1437,3 +1437,14 @@ test "loading array from struct is not optimized away" { var s = S{}; try s.doTheTest(); } + +test "local variable name begins with primitive integer type" { + const u032_ = 123; + comptime assert(u032_ == 123); + + const u0_ = 456; + comptime assert(u0_ == 456); + + const i0_ = 789; + comptime assert(i0_ == 789); +} diff --git a/test/cases/compile_errors/primitive_integer_type_with_leading_zero.zig b/test/cases/compile_errors/primitive_integer_type_with_leading_zero.zig new file mode 100644 index 0000000000000000000000000000000000000000..8492f3444b316338d2d1ad31472e92a589b673d7 --- /dev/null +++ b/test/cases/compile_errors/primitive_integer_type_with_leading_zero.zig @@ -0,0 +1,7 @@ +export fn entry1() void { + _ = u032; +} + +// error +// +// :2:9: error: primitive integer type 'u032' has leading zero