Properly handle 'default' nested in flow control, as well as default/case outside switch statements.

git-svn-id: https://cvs.khronos.org/svn/repos/ogl/trunk/ecosystem/public/sdk/tools/glslang@24629 e7fa87d3-cd2b-0410-9028-fcbf551c1848
This commit is contained in:
John Kessenich 2013-12-31 00:13:26 +00:00
parent ddbe0befd7
commit 99b0ffd468
4 changed files with 21 additions and 7 deletions

Binary file not shown.

View File

@ -109,8 +109,13 @@ void main()
break;
}
break;
default:
case 4:
f = tan(x);
if (f < 0.0)
default: // ERROR
break;
}
case 5: // ERROR
default: // ERROR
}

View File

@ -9,5 +9,5 @@
// source have to figure out how to create revision.h just to get a build
// going. However, if it is not updated, it can be a version behind.
#define GLSLANG_REVISION "24627"
#define GLSLANG_DATE "2013/12/30 13:40:03"
#define GLSLANG_REVISION "24628"
#define GLSLANG_DATE "2013/12/30 13:44:49"

View File

@ -2276,16 +2276,25 @@ switch_statement_list
case_label
: CASE expression COLON {
$$ = 0;
if (parseContext.switchLevel.size() == 0)
parseContext.error($1.loc, "cannot appear outside switch statement", "case", "");
else if (parseContext.switchLevel.back() != parseContext.controlFlowNestingLevel)
parseContext.error($1.loc, "cannot be nested inside control flow", "case", "");
parseContext.constantValueCheck($2, "case");
parseContext.integerCheck($2, "case");
$$ = parseContext.intermediate.addBranch(EOpCase, $2, $1.loc);
else {
parseContext.constantValueCheck($2, "case");
parseContext.integerCheck($2, "case");
$$ = parseContext.intermediate.addBranch(EOpCase, $2, $1.loc);
}
}
| DEFAULT COLON {
$$ = parseContext.intermediate.addBranch(EOpDefault, $1.loc);
$$ = 0;
if (parseContext.switchLevel.size() == 0)
parseContext.error($1.loc, "cannot appear outside switch statement", "default", "");
else if (parseContext.switchLevel.back() != parseContext.controlFlowNestingLevel)
parseContext.error($1.loc, "cannot be nested inside control flow", "default", "");
else
$$ = parseContext.intermediate.addBranch(EOpDefault, $1.loc);
}
;