From 735e4b4fa1ef359f2db9308522f5715a3130debd Mon Sep 17 00:00:00 2001 From: dan sinclair Date: Mon, 15 Aug 2022 11:41:07 +0000 Subject: [PATCH] Emit deprecation for fallthrough. The `fallthrough` statement is being removed from WGSL. This CL adds a deprecation warning into the current implementation to prepare folks for the upcoming removal. Bug: tint:1644 Change-Id: I599984b6a30b39312c4b794a9ecd70f0f626c759 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/98841 Auto-Submit: Dan Sinclair Commit-Queue: Ben Clayton Reviewed-by: Ben Clayton Kokoro: Kokoro --- src/tint/reader/wgsl/parser_impl.cc | 5 +++ src/tint/resolver/uniformity_test.cc | 44 ++++++------------- .../switch/fallthrough.wgsl.expected.dxc.hlsl | 4 ++ .../switch/fallthrough.wgsl.expected.fxc.hlsl | 4 ++ .../switch/fallthrough.wgsl.expected.glsl | 4 ++ .../switch/fallthrough.wgsl.expected.msl | 4 ++ .../switch/fallthrough.wgsl.expected.spvasm | 4 ++ .../switch/fallthrough.wgsl.expected.wgsl | 4 ++ 8 files changed, 43 insertions(+), 30 deletions(-) diff --git a/src/tint/reader/wgsl/parser_impl.cc b/src/tint/reader/wgsl/parser_impl.cc index 7f4e642086..bf26f8e7d6 100644 --- a/src/tint/reader/wgsl/parser_impl.cc +++ b/src/tint/reader/wgsl/parser_impl.cc @@ -2155,6 +2155,11 @@ Maybe ParserImpl::case_body() { return Failure::kErrored; } + deprecated(source, + "fallthrough is set to be removed from WGSL. " + "Case can accept multiple selectors if the existing case bodies are empty. " + "default is not yet supported in a case selector list."); + stmts.Push(create(source)); break; } diff --git a/src/tint/resolver/uniformity_test.cc b/src/tint/resolver/uniformity_test.cc index 2f5fc8f106..bbf7a4b712 100644 --- a/src/tint/resolver/uniformity_test.cc +++ b/src/tint/resolver/uniformity_test.cc @@ -3422,8 +3422,13 @@ fn foo() { )"; RunTest(src, false); - EXPECT_EQ(error_, - R"(test:14:7 warning: 'workgroupBarrier' must only be called from uniform control flow + EXPECT_EQ( + error_, + R"(test:11:7 warning: use of deprecated language feature: fallthrough is set to be removed from WGSL. Case can accept multiple selectors if the existing case bodies are empty. default is not yet supported in a case selector list. + fallthrough; + ^^^^^^^^^^^ + +test:14:7 warning: 'workgroupBarrier' must only be called from uniform control flow workgroupBarrier(); ^^^^^^^^^^^^^^^^ @@ -3487,8 +3492,13 @@ fn foo() { )"; RunTest(src, false); - EXPECT_EQ(error_, - R"(test:14:9 warning: 'workgroupBarrier' must only be called from uniform control flow + EXPECT_EQ( + error_, + R"(test:10:7 warning: use of deprecated language feature: fallthrough is set to be removed from WGSL. Case can accept multiple selectors if the existing case bodies are empty. default is not yet supported in a case selector list. + fallthrough; + ^^^^^^^^^^^ + +test:14:9 warning: 'workgroupBarrier' must only be called from uniform control flow workgroupBarrier(); ^^^^^^^^^^^^^^^^ @@ -3541,32 +3551,6 @@ test:6:11 note: reading from read_write storage buffer 'non_uniform' may result )"); } -TEST_F(UniformityAnalysisTest, Switch_VarBecomesUniformInDifferentCase_WithFallthrough) { - std::string src = R"( -@group(0) @binding(0) var non_uniform : i32; -@group(0) @binding(0) var condition : i32; - -fn foo() { - var x = non_uniform; - switch (condition) { - case 0: { - x = 5; - fallthrough; - } - case 42: { - if (x == 0) { - workgroupBarrier(); - } - } - default: { - } - } -} -)"; - - RunTest(src, true); -} - TEST_F(UniformityAnalysisTest, Switch_VarBecomesNonUniformInCase_BarrierAfter) { std::string src = R"( @group(0) @binding(0) var non_uniform : i32; diff --git a/test/tint/statements/switch/fallthrough.wgsl.expected.dxc.hlsl b/test/tint/statements/switch/fallthrough.wgsl.expected.dxc.hlsl index dc4b920c0c..0401873c43 100644 --- a/test/tint/statements/switch/fallthrough.wgsl.expected.dxc.hlsl +++ b/test/tint/statements/switch/fallthrough.wgsl.expected.dxc.hlsl @@ -1,3 +1,7 @@ +statements/switch/fallthrough.wgsl:6:13 warning: use of deprecated language feature: fallthrough is set to be removed from WGSL. Case can accept multiple selectors if the existing case bodies are empty. default is not yet supported in a case selector list. + fallthrough; + ^^^^^^^^^^^ + [numthreads(1, 1, 1)] void f() { int i = 0; diff --git a/test/tint/statements/switch/fallthrough.wgsl.expected.fxc.hlsl b/test/tint/statements/switch/fallthrough.wgsl.expected.fxc.hlsl index dc4b920c0c..0401873c43 100644 --- a/test/tint/statements/switch/fallthrough.wgsl.expected.fxc.hlsl +++ b/test/tint/statements/switch/fallthrough.wgsl.expected.fxc.hlsl @@ -1,3 +1,7 @@ +statements/switch/fallthrough.wgsl:6:13 warning: use of deprecated language feature: fallthrough is set to be removed from WGSL. Case can accept multiple selectors if the existing case bodies are empty. default is not yet supported in a case selector list. + fallthrough; + ^^^^^^^^^^^ + [numthreads(1, 1, 1)] void f() { int i = 0; diff --git a/test/tint/statements/switch/fallthrough.wgsl.expected.glsl b/test/tint/statements/switch/fallthrough.wgsl.expected.glsl index 85c42c0ea8..a8ba89975f 100644 --- a/test/tint/statements/switch/fallthrough.wgsl.expected.glsl +++ b/test/tint/statements/switch/fallthrough.wgsl.expected.glsl @@ -1,3 +1,7 @@ +statements/switch/fallthrough.wgsl:6:13 warning: use of deprecated language feature: fallthrough is set to be removed from WGSL. Case can accept multiple selectors if the existing case bodies are empty. default is not yet supported in a case selector list. + fallthrough; + ^^^^^^^^^^^ + #version 310 es void f() { diff --git a/test/tint/statements/switch/fallthrough.wgsl.expected.msl b/test/tint/statements/switch/fallthrough.wgsl.expected.msl index 93fa98e1d9..3377486b65 100644 --- a/test/tint/statements/switch/fallthrough.wgsl.expected.msl +++ b/test/tint/statements/switch/fallthrough.wgsl.expected.msl @@ -1,3 +1,7 @@ +statements/switch/fallthrough.wgsl:6:13 warning: use of deprecated language feature: fallthrough is set to be removed from WGSL. Case can accept multiple selectors if the existing case bodies are empty. default is not yet supported in a case selector list. + fallthrough; + ^^^^^^^^^^^ + #include using namespace metal; diff --git a/test/tint/statements/switch/fallthrough.wgsl.expected.spvasm b/test/tint/statements/switch/fallthrough.wgsl.expected.spvasm index 4e8b98921f..4daf8702ce 100644 --- a/test/tint/statements/switch/fallthrough.wgsl.expected.spvasm +++ b/test/tint/statements/switch/fallthrough.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +statements/switch/fallthrough.wgsl:6:13 warning: use of deprecated language feature: fallthrough is set to be removed from WGSL. Case can accept multiple selectors if the existing case bodies are empty. default is not yet supported in a case selector list. + fallthrough; + ^^^^^^^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/tint/statements/switch/fallthrough.wgsl.expected.wgsl b/test/tint/statements/switch/fallthrough.wgsl.expected.wgsl index 7794a631c1..b352c8fde8 100644 --- a/test/tint/statements/switch/fallthrough.wgsl.expected.wgsl +++ b/test/tint/statements/switch/fallthrough.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +statements/switch/fallthrough.wgsl:6:13 warning: use of deprecated language feature: fallthrough is set to be removed from WGSL. Case can accept multiple selectors if the existing case bodies are empty. default is not yet supported in a case selector list. + fallthrough; + ^^^^^^^^^^^ + @compute @workgroup_size(1) fn f() { var i : i32;