@@ -196,7 +196,7 @@ ExprResult Parser::ParseConditionalExpression() {
196196 }
197197
198198 ExprResult LHS = ParseCastExpression (
199- AnyCastExpr, /* isAddressOfOperand=*/ false , NotTypeCast);
199+ AnyCastExpr, /* isAddressOfOperand=*/ false , TypeCastState:: NotTypeCast);
200200 return ParseRHSOfBinaryExpression (LHS, prec::Conditional);
201201}
202202
@@ -239,7 +239,7 @@ ExprResult Parser::ParseConstantExpression() {
239239 // C++98 and C++11 have no such rule, but this is only a defect in C++98.
240240 EnterExpressionEvaluationContext ConstantEvaluated (
241241 Actions, Sema::ExpressionEvaluationContext::ConstantEvaluated);
242- return ParseConstantExpressionInExprEvalContext (NotTypeCast);
242+ return ParseConstantExpressionInExprEvalContext (TypeCastState:: NotTypeCast);
243243}
244244
245245ExprResult Parser::ParseArrayBoundExpression () {
@@ -267,13 +267,14 @@ ExprResult Parser::ParseArrayBoundExpression() {
267267 break ;
268268 Iter->InConditionallyConstantEvaluateContext = true ;
269269 }
270- return ParseConstantExpressionInExprEvalContext (NotTypeCast);
270+ return ParseConstantExpressionInExprEvalContext (TypeCastState:: NotTypeCast);
271271}
272272
273273ExprResult Parser::ParseCaseExpression (SourceLocation CaseLoc) {
274274 EnterExpressionEvaluationContext ConstantEvaluated (
275275 Actions, Sema::ExpressionEvaluationContext::ConstantEvaluated);
276- ExprResult LHS (ParseCastExpression (AnyCastExpr, false , NotTypeCast));
276+ ExprResult LHS (
277+ ParseCastExpression (AnyCastExpr, false , TypeCastState::NotTypeCast));
277278 ExprResult Res (ParseRHSOfBinaryExpression (LHS, prec::Conditional));
278279 return Actions.ActOnCaseExpr (CaseLoc, Res);
279280}
@@ -310,12 +311,12 @@ Parser::ParseConstraintLogicalAndExpression(bool IsTrailingRequiresClause) {
310311 EnterExpressionEvaluationContext ConstantEvaluated (
311312 Actions, Sema::ExpressionEvaluationContext::Unevaluated);
312313 bool NotPrimaryExpression = false ;
313- auto ParsePrimary = [&] () {
314- ExprResult E = ParseCastExpression (PrimaryExprOnly,
315- /* isAddressOfOperand= */ false ,
316- /* isTypeCast =*/ NotTypeCast ,
317- /* isVectorLiteral =*/ false ,
318- &NotPrimaryExpression);
314+ auto ParsePrimary = [&]() {
315+ ExprResult E =
316+ ParseCastExpression (PrimaryExprOnly ,
317+ /* isAddressOfOperand =*/ false ,
318+ /* isTypeCast =*/ TypeCastState::NotTypeCast ,
319+ /* isVectorLiteral= */ false , &NotPrimaryExpression);
319320 if (E.isInvalid ())
320321 return ExprError ();
321322 auto RecoverFromNonPrimary = [&] (ExprResult E, bool Note) {
@@ -1107,8 +1108,9 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
11071108 }
11081109 ParsedType CastTy;
11091110 SourceLocation RParenLoc;
1110- Res = ParseParenExpression (ParenExprType, false /* stopIfCastExr*/ ,
1111- isTypeCast == IsTypeCast, CastTy, RParenLoc);
1111+ Res = ParseParenExpression (ParenExprType, false /* stopIfCastExr*/ ,
1112+ isTypeCast == TypeCastState::IsTypeCast, CastTy,
1113+ RParenLoc);
11121114
11131115 // FIXME: What should we do if a vector literal is followed by a
11141116 // postfix-expression suffix? Usually postfix operators are permitted on
@@ -1347,8 +1349,8 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
13471349 Token Replacement;
13481350 CastExpressionIdValidator Validator (
13491351 /* Next=*/ Tok,
1350- /* AllowTypes=*/ isTypeCast != NotTypeCast,
1351- /* AllowNonTypes=*/ isTypeCast != IsTypeCast);
1352+ /* AllowTypes=*/ isTypeCast != TypeCastState:: NotTypeCast,
1353+ /* AllowNonTypes=*/ isTypeCast != TypeCastState:: IsTypeCast);
13521354 Validator.IsAddressOfOperand = isAddressOfOperand;
13531355 if (Tok.isOneOf (tok::periodstar, tok::arrowstar)) {
13541356 Validator.WantExpressionKeywords = false ;
@@ -1449,10 +1451,9 @@ ExprResult Parser::ParseCastExpression(CastParseKind ParseKind,
14491451 // One special case is implicitly handled here: if the preceding tokens are
14501452 // an ambiguous cast expression, such as "(T())++", then we recurse to
14511453 // determine whether the '++' is prefix or postfix.
1452- Res = ParseCastExpression (getLangOpts ().CPlusPlus ?
1453- UnaryExprOnly : AnyCastExpr,
1454- /* isAddressOfOperand*/ false , NotCastExpr,
1455- NotTypeCast);
1454+ Res = ParseCastExpression (
1455+ getLangOpts ().CPlusPlus ? UnaryExprOnly : AnyCastExpr,
1456+ /* isAddressOfOperand*/ false , NotCastExpr, TypeCastState::NotTypeCast);
14561457 if (NotCastExpr) {
14571458 // If we return with NotCastExpr = true, we must not consume any tokens,
14581459 // so put the token back where we found it.
@@ -3258,10 +3259,11 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
32583259 // Parse the cast-expression that follows it next.
32593260 // isVectorLiteral = true will make sure we don't parse any
32603261 // Postfix expression yet
3261- Result = ParseCastExpression (/* isUnaryExpression=*/ AnyCastExpr,
3262- /* isAddressOfOperand=*/ false ,
3263- /* isTypeCast=*/ IsTypeCast,
3264- /* isVectorLiteral=*/ true );
3262+ Result =
3263+ ParseCastExpression (/* isUnaryExpression=*/ AnyCastExpr,
3264+ /* isAddressOfOperand=*/ false ,
3265+ /* isTypeCast=*/ TypeCastState::IsTypeCast,
3266+ /* isVectorLiteral=*/ true );
32653267
32663268 if (!Result.isInvalid ()) {
32673269 Result = Actions.ActOnCastExpr (getCurScope (), OpenLoc,
@@ -3312,7 +3314,7 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
33123314 // TODO: For cast expression with CastTy.
33133315 Result = ParseCastExpression (/* isUnaryExpression=*/ AnyCastExpr,
33143316 /* isAddressOfOperand=*/ false ,
3315- /* isTypeCast=*/ IsTypeCast);
3317+ /* isTypeCast=*/ TypeCastState:: IsTypeCast);
33163318 if (!Result.isInvalid ()) {
33173319 Result = Actions.ActOnCastExpr (getCurScope (), OpenLoc,
33183320 DeclaratorInfo, CastTy,
@@ -3381,7 +3383,7 @@ Parser::ParseParenExpression(ParenParseOption &ExprType, bool stopIfCastExpr,
33813383 } else {
33823384 InMessageExpressionRAIIObject InMessage (*this , false );
33833385
3384- Result = ParseExpression (MaybeTypeCast);
3386+ Result = ParseExpression (TypeCastState:: MaybeTypeCast);
33853387 if (!getLangOpts ().CPlusPlus && Result.isUsable ()) {
33863388 // Correct typos in non-C++ code earlier so that implicit-cast-like
33873389 // expressions are parsed correctly.
0 commit comments