diff --git a/lib/std/zig/ast.zig b/lib/std/zig/ast.zig index 0b0445d39a..785c58b067 100644 --- a/lib/std/zig/ast.zig +++ b/lib/std/zig/ast.zig @@ -262,6 +262,12 @@ pub const Tree = struct { .extra_volatile_qualifier => { return stream.writeAll("extra volatile qualifier"); }, + .invalid_align => { + return stream.writeAll("alignment not allowed on arrays"); + }, + .invalid_bit_range => { + return stream.writeAll("bit range not allowed on slices and arrays"); + }, .invalid_token => { return stream.print("invalid token '{s}'", .{ token_tags[parse_error.token].symbol(), @@ -2323,6 +2329,8 @@ pub const Error = struct { extra_allowzero_qualifier, extra_const_qualifier, extra_volatile_qualifier, + invalid_align, + invalid_bit_range, invalid_token, same_line_doc_comment, unattached_doc_comment, diff --git a/lib/std/zig/parse.zig b/lib/std/zig/parse.zig index a557b57ad4..c980602b7c 100644 --- a/lib/std/zig/parse.zig +++ b/lib/std/zig/parse.zig @@ -1777,10 +1777,10 @@ const Parser = struct { const mods = try p.parsePtrModifiers(); const elem_type = try p.expectTypeExpr(); if (mods.bit_range_start != 0) { - @panic("TODO implement this error"); - //try p.warn(.{ - // .BitRangeInvalid = .{ .node = mods.bit_range_start }, - //}); + try p.warnMsg(.{ + .tag = .invalid_bit_range, + .token = p.nodes.items(.main_token)[mods.bit_range_start], + }); } if (len_expr == 0) { if (sentinel == 0) { @@ -1816,10 +1816,10 @@ const Parser = struct { } } else { if (mods.align_node != 0) { - @panic("TODO implement this error"); - //try p.warn(.{ - // .AlignInvalid = .{ .node = mods.align_node }, - //}); + try p.warnMsg(.{ + .tag = .invalid_align, + .token = p.nodes.items(.main_token)[mods.align_node], + }); } if (sentinel == 0) { return p.addNode(.{ diff --git a/lib/std/zig/parser_test.zig b/lib/std/zig/parser_test.zig index dc653047df..3b58cb43ea 100644 --- a/lib/std/zig/parser_test.zig +++ b/lib/std/zig/parser_test.zig @@ -4032,6 +4032,22 @@ test "zig fmt: trailing comma should force multiline 1 column" { // ); //} +test "zig fmt: error for invalid bit range" { + try testError( + \\var x: []align(0:0:0)u8 = bar; + , &[_]Error{ + .invalid_bit_range, + }); +} + +test "zig fmt: error for invalid align" { + try testError( + \\var x: [10]align(10)u8 = bar; + , &[_]Error{ + .invalid_align, + }); +} + test "recovery: top level" { try testError( \\test "" {inline}