[tint] Allow for (superfluous) trailing comma in variable qualifier
This change causes two test failures in CTS so temporary disabling
these specific tests until CTS can be updated.
See:
https://www.w3.org/TR/WGSL/#recursive-descent-syntax-variable_decl
Bug:366000875
Change-Id: Ie57e0c66bd37f5dc2097337b02ddb8b0066f833f
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/206414
Commit-Queue: Peter McNeeley <petermcneeley@google.com>
Reviewed-by: James Price <jrprice@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/wgsl/reader/parser/parser.cc b/src/tint/lang/wgsl/reader/parser/parser.cc
index df57014..2af3224 100644
--- a/src/tint/lang/wgsl/reader/parser/parser.cc
+++ b/src/tint/lang/wgsl/reader/parser/parser.cc
@@ -832,7 +832,7 @@
}
// variable_qualifier
-// : _template_args_start expression (COMMA expression)? _template_args_end
+// : _template_args_start expression (COMMA expression)? COMMA? _template_args_end
Maybe<Parser::VariableQualifier> Parser::variable_qualifier() {
if (!peek_is(Token::Type::kTemplateArgsLeft) && !peek_is(Token::Type::kLessThan)) {
// Note: kLessThan will give a sensible error at expect_template_arg_block()
@@ -845,11 +845,14 @@
if (address_space.errored) {
return Failure::kErrored;
}
+ // The first expression in this condition also matches trailing comma.
if (match(Token::Type::kComma) && !peek().Is(Token::Type::kTemplateArgsRight)) {
auto access = expect_expression("'var' access mode");
if (access.errored) {
return Failure::kErrored;
}
+ // Allow for trailing comma.
+ match(Token::Type::kComma);
return VariableQualifier{address_space.value, access.value};
}
return VariableQualifier{address_space.value};
diff --git a/src/tint/lang/wgsl/reader/parser/parser_test.cc b/src/tint/lang/wgsl/reader/parser/parser_test.cc
index 9980542..52c926f 100644
--- a/src/tint/lang/wgsl/reader/parser/parser_test.cc
+++ b/src/tint/lang/wgsl/reader/parser/parser_test.cc
@@ -48,6 +48,16 @@
ASSERT_EQ(1u, program.AST().Functions().Length());
}
+TEST_F(WGSLParserTest, Parses_ExtraCommas) {
+ auto p = parser(R"(
+@group(0) @binding(0) var<storage,> x: i32;
+@group(0) @binding(1) var<storage,read_write,> x: i32;
+)");
+ ASSERT_TRUE(p->Parse()) << p->error();
+ Program program = p->program();
+ ASSERT_EQ(2u, program.AST().GlobalVariables().Length());
+}
+
TEST_F(WGSLParserTest, Parses_ExtraSemicolons) {
auto p = parser(R"(
;
diff --git a/webgpu-cts/compat-expectations.txt b/webgpu-cts/compat-expectations.txt
index b8c8466..6707975 100644
--- a/webgpu-cts/compat-expectations.txt
+++ b/webgpu-cts/compat-expectations.txt
@@ -1671,6 +1671,12 @@
crbug.com/364904749 [ android arm ] webgpu:web_platform,canvas,configure:viewFormats:canvasType="onscreen";format="rgba8unorm";viewFormatFeature="texture-compression-astc" [ Failure ]
crbug.com/364904749 [ android arm ] webgpu:web_platform,canvas,configure:viewFormats:canvasType="onscreen";format="rgba8unorm";viewFormatFeature="texture-compression-etc2" [ Failure ]
+# Temporary failures due to intentional change in behavior
+crbug.com/dawn/366000875 webgpu:shader,validation,decl,var:address_space_access_mode:address_space="storage";access_mode="read";trailing_comma=true [ Failure ]
+crbug.com/dawn/366000875 webgpu:shader,validation,decl,var:address_space_access_mode:address_space="storage";access_mode="read_write";trailing_comma=true [ Failure ]
+crbug.com/dawn/366000875 webgpu:shader,validation,decl,var:var_access_mode_bad_other_template_contents:accessMode="read";prefix="storage,";suffix="," [ Failure ]
+crbug.com/dawn/366000875 webgpu:shader,validation,decl,var:var_access_mode_bad_other_template_contents:accessMode="read_write";prefix="storage,";suffix="," [ Failure ]
+
################################################################################
# New flakes. Please triage - will be discarded/regenerated by the next roll:
# ##ROLLER_DISCARD_AND_REWRITE##
@@ -1725,8 +1731,6 @@
crbug.com/dawn/0000 webgpu:shader,execution,expression,call,builtin,textureSampleLevel:depth_3d_coords:format="depth16unorm";viewDimension="cube" [ Failure ]
crbug.com/dawn/0000 webgpu:shader,execution,expression,call,builtin,textureSampleLevel:depth_3d_coords:format="depth32float";viewDimension="cube" [ Failure ]
crbug.com/dawn/0000 webgpu:shader,execution,expression,call,builtin,textureSampleLevel:depth_array_2d_coords:* [ Failure ]
-crbug.com/dawn/0000 webgpu:shader,validation,decl,var:address_space_access_mode:address_space="storage";access_mode="read";trailing_comma=true [ Failure ]
-crbug.com/dawn/0000 webgpu:shader,validation,decl,var:address_space_access_mode:address_space="storage";access_mode="read_write";trailing_comma=true [ Failure ]
crbug.com/dawn/0000 webgpu:web_platform,external_texture,video:importExternalTexture,cameraCapture:* [ Failure ]
crbug.com/dawn/0000 [ angle-opengl dawn-no-backend-validation desktop display-server-x graphite-disabled intel-0x4680 no-asan no-clang-coverage oop-c passthrough release renderer-skia-gl target-cpu-64 ubuntu webgpu-adapter-default webgpu-no-worker ] webgpu:compat,api,validation,render_pipeline,unsupported_wgsl:* [ Failure ]
crbug.com/dawn/0000 [ angle-opengl dawn-no-backend-validation desktop display-server-x graphite-disabled intel-0x4680 no-asan no-clang-coverage oop-c passthrough release renderer-skia-gl target-cpu-64 ubuntu webgpu-adapter-default webgpu-no-worker ] webgpu:shader,execution,expression,call,builtin,dpdxFine:* [ Failure ]
diff --git a/webgpu-cts/expectations.txt b/webgpu-cts/expectations.txt
index 8ddf3c6b..3f836f4 100644
--- a/webgpu-cts/expectations.txt
+++ b/webgpu-cts/expectations.txt
@@ -1655,6 +1655,12 @@
crbug.com/dawn/0000 [ nvidia-0x2184 ] webgpu:shader,execution,expression,call,builtin,fwidthFine:f32:vectorize="_undef_";non_uniform_discard=true [ Failure ]
crbug.com/dawn/0000 [ nvidia-0x2184 ] webgpu:shader,execution,expression,call,builtin,fwidthFine:f32:vectorize=4;non_uniform_discard=true [ Failure ]
+# Temporary Failures due to intentional change in behavior
+crbug.com/dawn/366000875 webgpu:shader,validation,decl,var:address_space_access_mode:address_space="storage";access_mode="read";trailing_comma=true [ Failure ]
+crbug.com/dawn/366000875 webgpu:shader,validation,decl,var:address_space_access_mode:address_space="storage";access_mode="read_write";trailing_comma=true [ Failure ]
+crbug.com/dawn/366000875 webgpu:shader,validation,decl,var:var_access_mode_bad_other_template_contents:accessMode="read";prefix="storage,";suffix="," [ Failure ]
+crbug.com/dawn/366000875 webgpu:shader,validation,decl,var:var_access_mode_bad_other_template_contents:accessMode="read_write";prefix="storage,";suffix="," [ Failure ]
+
################################################################################
# AMD Macbook 16" Qualification (NEEDS TRIAGE)
################################################################################
@@ -1844,8 +1850,7 @@
crbug.com/dawn/0000 [ intel-0x9bc5 ubuntu ] webgpu:shader,execution,expression,call,builtin,textureSample:sampled_2d_coords:* [ RetryOnFailure ]
crbug.com/dawn/0000 [ intel-0x9bc5 ubuntu ] webgpu:shader,execution,expression,call,builtin,textureSampleLevel:sampled_2d_coords:* [ RetryOnFailure ]
-crbug.com/dawn/0000 webgpu:shader,validation,decl,var:address_space_access_mode:address_space="storage";access_mode="read";trailing_comma=true [ Failure ]
-crbug.com/dawn/0000 webgpu:shader,validation,decl,var:address_space_access_mode:address_space="storage";access_mode="read_write";trailing_comma=true [ Failure ]
+
crbug.com/dawn/0000 [ android-chromium android-r angle-opengles dawn-backend-validation graphite-disabled mobile no-asan no-clang-coverage oop-c passthrough qualcomm renderer-skia-gl target-cpu-32 webgpu-adapter-default webgpu-no-worker ] webgpu:shader,execution,expression,call,builtin,textureSampleLevel:depth_3d_coords:* [ Failure ]
crbug.com/dawn/0000 [ android-chromium android-r angle-opengles dawn-backend-validation graphite-disabled mobile no-asan no-clang-coverage oop-c passthrough qualcomm renderer-skia-gl target-cpu-32 webgpu-adapter-default webgpu-no-worker ] webgpu:shader,execution,expression,call,builtin,textureSampleLevel:sampled_array_3d_coords:format="astc-12x10-unorm" [ Failure ]
crbug.com/dawn/0000 [ android-chromium android-r angle-opengles dawn-backend-validation graphite-disabled mobile no-asan no-clang-coverage oop-c passthrough qualcomm renderer-skia-gl target-cpu-32 webgpu-adapter-default webgpu-no-worker ] webgpu:shader,execution,expression,call,builtin,textureSampleLevel:sampled_array_3d_coords:format="astc-12x10-unorm-srgb" [ Failure ]