[Parser] Only correct delayed typos when needed

ActOnBinOp corrects delayed typos when in C mode; don't correct them in that
case. Fixes PR26700.

Differential Revision: http://reviews.llvm.org/D20490

llvm-svn: 272587
This commit is contained in:
Erik Pilkington 2016-06-13 20:56:45 +00:00
parent f42103ce8b
commit 142a874890
2 changed files with 12 additions and 0 deletions

View File

@ -446,6 +446,10 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
LHS = Actions.ActOnBinOp(getCurScope(), OpToken.getLocation(),
OpToken.getKind(), LHS.get(), RHS.get());
// In this case, ActOnBinOp performed the CorrectDelayedTyposInExpr check.
if (!getLangOpts().CPlusPlus)
continue;
} else {
LHS = Actions.ActOnConditionalOp(OpToken.getLocation(), ColonLoc,
LHS.get(), TernaryMiddle.get(),

View File

@ -57,3 +57,11 @@ void fn2() {
}
int d = X ? d : L; // expected-error 2 {{use of undeclared identifier}}
int fn_with_ids() { ID = ID == ID >= ID ; } // expected-error 4 {{use of undeclared identifier}}
int fn_with_rs(int r) { r = TYPO + r * TYPO; } // expected-error 2 {{use of undeclared identifier}}
void fn_with_unknown(int a, int b) {
fn_with_unknown(unknown, unknown | unknown); // expected-error 3 {{use of undeclared identifier}}
}