Fix infinite loop in parser due to failure to detect label
This commit is contained in:
parent
f0b9b5cce4
commit
cfe2c7bed5
|
@ -6813,11 +6813,19 @@ Expression* Parser::ParseSimpleExpression(bool lhs, bool tid)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TK_OPEN_BRACE:
|
case TK_OPEN_BRACE:
|
||||||
mScanner->NextToken();
|
if (!lhs)
|
||||||
exp = new Expression(mScanner->mLocation, EX_AGGREGATE);
|
{
|
||||||
exp->mLeft = ParseListExpression(false);
|
mScanner->NextToken();
|
||||||
exp->mDecType = TheConstVoidTypeDeclaration;
|
exp = new Expression(mScanner->mLocation, EX_AGGREGATE);
|
||||||
ConsumeToken(TK_CLOSE_BRACE);
|
exp->mLeft = ParseListExpression(false);
|
||||||
|
exp->mDecType = TheConstVoidTypeDeclaration;
|
||||||
|
ConsumeToken(TK_CLOSE_BRACE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mErrors->Error(mScanner->mLocation, EERR_SYNTAX, "Term starts with invalid token", TokenNames[mScanner->mToken]);
|
||||||
|
mScanner->NextToken();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case TK_ASM:
|
case TK_ASM:
|
||||||
mScanner->NextToken();
|
mScanner->NextToken();
|
||||||
|
@ -7726,7 +7734,7 @@ Expression* Parser::ParsePostfixExpression(bool lhs)
|
||||||
nexp->mDecType = TheVoidTypeDeclaration;
|
nexp->mDecType = TheVoidTypeDeclaration;
|
||||||
exp = nexp->ConstantFold(mErrors, mDataSection, mCompilationUnits->mLinker);
|
exp = nexp->ConstantFold(mErrors, mDataSection, mCompilationUnits->mLinker);
|
||||||
}
|
}
|
||||||
else if (mScanner->mToken == TK_OPEN_BRACE)
|
else if (mScanner->mToken == TK_OPEN_BRACE && exp->mType == EX_TYPE)
|
||||||
{
|
{
|
||||||
exp = ParseCastExpression(exp);
|
exp = ParseCastExpression(exp);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue