Commit cdeafd20 by Olli Etuaho

Fix missing init when parsing storage qualifier fails

When parsing a storage qualifier results in an error, the parser should not leave the type uninitialized. Otherwise after recovering from the error the parsed value could contain uninitialized memory, which could cause flaky asserts in further parsing. TEST=dEQP-GLES2.functional.shaders.functions.* BUG=angleproject:1200 Change-Id: Ia3add76df243898e35fee97d01555b953cff8379 Reviewed-on: https://chromium-review.googlesource.com/311140Tested-by: 's avatarOlli Etuaho <oetuaho@nvidia.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Tested-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent bf8a72f6
......@@ -930,12 +930,12 @@ type_qualifier
$$.invariant = true;
}
| storage_qualifier {
if ($1.qualifier != EvqConst && !context->symbolTable.atGlobalLevel()) {
if ($1.qualifier != EvqConst && !context->symbolTable.atGlobalLevel())
{
context->error(@1, "Local variables can only use the const storage qualifier.", getQualifierString($1.qualifier));
context->recover();
} else {
$$.setBasic(EbtVoid, $1.qualifier, @1);
}
$$.setBasic(EbtVoid, $1.qualifier, @1);
}
| interpolation_qualifier storage_qualifier {
$$ = context->joinInterpolationQualifiers(@1, $1.qualifier, @2, $2.qualifier);
......
......@@ -3567,12 +3567,12 @@ yyreduce:
case 133:
{
if ((yyvsp[0].interm.type).qualifier != EvqConst && !context->symbolTable.atGlobalLevel()) {
if ((yyvsp[0].interm.type).qualifier != EvqConst && !context->symbolTable.atGlobalLevel())
{
context->error((yylsp[0]), "Local variables can only use the const storage qualifier.", getQualifierString((yyvsp[0].interm.type).qualifier));
context->recover();
} else {
(yyval.interm.type).setBasic(EbtVoid, (yyvsp[0].interm.type).qualifier, (yylsp[0]));
}
(yyval.interm.type).setBasic(EbtVoid, (yyvsp[0].interm.type).qualifier, (yylsp[0]));
}
break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment