зеркало из https://github.com/stride3d/xkslang.git
Make the "switch-label not followed by statement" warning an error, depending on version.
This commit is contained in:
Родитель
add1a4d88d
Коммит
0e7674afa0
|
@ -1,4 +1,5 @@
|
||||||
spv.switch.frag
|
spv.switch.frag
|
||||||
|
Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
|
||||||
WARNING: 0:121: 'switch' : last case/default label not followed by statements
|
WARNING: 0:121: 'switch' : last case/default label not followed by statements
|
||||||
WARNING: 0:134: 'switch' : last case/default label not followed by statements
|
WARNING: 0:134: 'switch' : last case/default label not followed by statements
|
||||||
WARNING: 0:139: 'switch' : last case/default label not followed by statements
|
WARNING: 0:139: 'switch' : last case/default label not followed by statements
|
||||||
|
@ -11,7 +12,7 @@ Linked fragment stage:
|
||||||
// Generated by (magic number): 51a00bb
|
// Generated by (magic number): 51a00bb
|
||||||
// Id's are bound by 261
|
// Id's are bound by 261
|
||||||
|
|
||||||
Source ESSL 300
|
Source ESSL 310
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Fragment 4
|
EntryPoint Fragment 4
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
switch.frag
|
switch.frag
|
||||||
ERROR: 0:11: 'switch' : condition must be a scalar integer expression
|
ERROR: 0:11: 'switch' : condition must be a scalar integer expression
|
||||||
ERROR: 0:14: 'switch' : condition must be a scalar integer expression
|
ERROR: 0:14: 'switch' : condition must be a scalar integer expression
|
||||||
WARNING: 0:21: 'switch' : last case/default label not followed by statements
|
ERROR: 0:21: 'switch' : last case/default label not followed by statements
|
||||||
ERROR: 0:28: 'switch' : cannot have statements before first case/default label
|
ERROR: 0:28: 'switch' : cannot have statements before first case/default label
|
||||||
ERROR: 0:43: 'default' : duplicate label
|
ERROR: 0:43: 'default' : duplicate label
|
||||||
ERROR: 0:63: 'case' : duplicated value
|
ERROR: 0:63: 'case' : duplicated value
|
||||||
|
@ -15,10 +15,10 @@ ERROR: 0:115: 'default' : cannot be nested inside control flow
|
||||||
ERROR: 0:119: 'case' : cannot appear outside switch statement
|
ERROR: 0:119: 'case' : cannot appear outside switch statement
|
||||||
ERROR: 0:120: 'default' : cannot appear outside switch statement
|
ERROR: 0:120: 'default' : cannot appear outside switch statement
|
||||||
ERROR: 0:126: 'onlyInSwitch' : undeclared identifier
|
ERROR: 0:126: 'onlyInSwitch' : undeclared identifier
|
||||||
WARNING: 0:128: 'switch' : last case/default label not followed by statements
|
ERROR: 0:128: 'switch' : last case/default label not followed by statements
|
||||||
ERROR: 0:140: 'nestedX' : undeclared identifier
|
ERROR: 0:140: 'nestedX' : undeclared identifier
|
||||||
ERROR: 0:157: 'nestedZ' : undeclared identifier
|
ERROR: 0:157: 'nestedZ' : undeclared identifier
|
||||||
ERROR: 17 compilation errors. No code generated.
|
ERROR: 19 compilation errors. No code generated.
|
||||||
|
|
||||||
|
|
||||||
Shader version: 300
|
Shader version: 300
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#version 300 es
|
#version 310 es
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
uniform int c, d;
|
uniform int c, d;
|
||||||
in float x;
|
in float x;
|
||||||
|
|
|
@ -5186,8 +5186,16 @@ TIntermNode* TParseContext::addSwitch(TSourceLoc loc, TIntermTyped* expression,
|
||||||
if (switchSequence->size() == 0)
|
if (switchSequence->size() == 0)
|
||||||
return expression;
|
return expression;
|
||||||
|
|
||||||
if (lastStatements == 0)
|
if (lastStatements == 0) {
|
||||||
warn(loc, "last case/default label not followed by statements", "switch", "");
|
// This was originally an ERRROR, because early versions of the specification said
|
||||||
|
// "it is an error to have no statement between a label and the end of the switch statement."
|
||||||
|
// The specifications were updated to remove this (being ill-defined what a "statement" was),
|
||||||
|
// so, this became a warning. However, 3.0 tests still check for the error.
|
||||||
|
if (profile == EEsProfile && version <= 300 && (messages & EShMsgRelaxedErrors) == 0)
|
||||||
|
error(loc, "last case/default label not followed by statements", "switch", "");
|
||||||
|
else
|
||||||
|
warn(loc, "last case/default label not followed by statements", "switch", "");
|
||||||
|
}
|
||||||
|
|
||||||
TIntermAggregate* body = new TIntermAggregate(EOpSequence);
|
TIntermAggregate* body = new TIntermAggregate(EOpSequence);
|
||||||
body->getSequence() = *switchSequenceStack.back();
|
body->getSequence() = *switchSequenceStack.back();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче