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 <dsinclair@chromium.org>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/reader/wgsl/parser_impl.cc b/src/tint/reader/wgsl/parser_impl.cc
index 7f4e642..bf26f8e 100644
--- a/src/tint/reader/wgsl/parser_impl.cc
+++ b/src/tint/reader/wgsl/parser_impl.cc
@@ -2155,6 +2155,11 @@
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<ast::FallthroughStatement>(source));
break;
}
diff --git a/src/tint/resolver/uniformity_test.cc b/src/tint/resolver/uniformity_test.cc
index 2f5fc8f..bbf7a4b 100644
--- a/src/tint/resolver/uniformity_test.cc
+++ b/src/tint/resolver/uniformity_test.cc
@@ -3422,8 +3422,13 @@
)";
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 @@
)";
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_F(UniformityAnalysisTest, Switch_VarBecomesUniformInDifferentCase_WithFallthrough) {
- std::string src = R"(
-@group(0) @binding(0) var<storage, read_write> non_uniform : i32;
-@group(0) @binding(0) var<uniform> 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<storage, read_write> 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 dc4b920..0401873 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 dc4b920..0401873 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 85c42c0..a8ba899 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 93fa98e..3377486 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 <metal_stdlib>
using namespace metal;
diff --git a/test/tint/statements/switch/fallthrough.wgsl.expected.spvasm b/test/tint/statements/switch/fallthrough.wgsl.expected.spvasm
index 4e8b989..4daf870 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 7794a63..b352c8f 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;