[Tint] Allow trailing commas in var decl

Allow trailing commas after the address space in a var decl when no
access mode is provided, as permitted by the spec.

Bug: 42251291
Change-Id: I119ca64d896aa404dea167b5d8e2da9c1fd5a6f7
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/198275
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Natalie Chouinard <chouinard@google.com>
diff --git a/src/tint/lang/wgsl/reader/parser/parser.cc b/src/tint/lang/wgsl/reader/parser/parser.cc
index a112464..2abc56e 100644
--- a/src/tint/lang/wgsl/reader/parser/parser.cc
+++ b/src/tint/lang/wgsl/reader/parser/parser.cc
@@ -845,7 +845,7 @@
         if (address_space.errored) {
             return Failure::kErrored;
         }
-        if (match(Token::Type::kComma)) {
+        if (match(Token::Type::kComma) && !peek().Is(Token::Type::kTemplateArgsRight)) {
             auto access = expect_expression("'var' access mode");
             if (access.errored) {
                 return Failure::kErrored;
diff --git a/src/tint/lang/wgsl/reader/parser/variable_decl_test.cc b/src/tint/lang/wgsl/reader/parser/variable_decl_test.cc
index 69f5f20..04b08df 100644
--- a/src/tint/lang/wgsl/reader/parser/variable_decl_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/variable_decl_test.cc
@@ -117,5 +117,22 @@
     ast::CheckIdentifier(v->address_space, "push_constant");
 }
 
+TEST_F(WGSLParserTest, VariableDecl_WithAddressSpaceTrailingComma) {
+    auto p = parser("var<private,> my_var : f32");
+    auto v = p->variable_decl();
+    EXPECT_TRUE(v.matched);
+    EXPECT_FALSE(v.errored);
+    EXPECT_FALSE(p->has_error());
+    ast::CheckIdentifier(v->name, "my_var");
+
+    ast::CheckIdentifier(v->type, "f32");
+    ast::CheckIdentifier(v->address_space, "private");
+
+    EXPECT_EQ(v->source.range.begin.line, 1u);
+    EXPECT_EQ(v->source.range.begin.column, 15u);
+    EXPECT_EQ(v->source.range.end.line, 1u);
+    EXPECT_EQ(v->source.range.end.column, 21u);
+}
+
 }  // namespace
 }  // namespace tint::wgsl::reader