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>
This commit is contained in:
dan sinclair 2022-08-15 11:41:07 +00:00 committed by Dawn LUCI CQ
parent 52cc4f5d1c
commit 735e4b4fa1
8 changed files with 43 additions and 30 deletions

View File

@ -2155,6 +2155,11 @@ Maybe<const ast::BlockStatement*> 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<ast::FallthroughStatement>(source));
break;
}

View File

@ -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<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;

View File

@ -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;

View File

@ -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;

View File

@ -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() {

View File

@ -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;

View File

@ -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

View File

@ -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;