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;