Skip to content

Commit

Permalink
[Parser] Fix bug where delayed typo in conditional expression was cor…
Browse files Browse the repository at this point in the history
…rected twice

Patch by David Tarditi!

Differential revision: https://reviews.llvm.org/D22930

llvm-svn: 277095
  • Loading branch information
epilk committed Jul 29, 2016
1 parent eb505f9 commit 4c922ab
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
7 changes: 4 additions & 3 deletions clang/lib/Parse/ParseExpr.cpp
Expand Up @@ -446,14 +446,15 @@ 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(),
RHS.get());
}
// In this case, ActOnBinOp or ActOnConditionalOp performed the
// CorrectDelayedTyposInExpr check.
if (!getLangOpts().CPlusPlus)
continue;
}
// Ensure potential typos aren't left undiagnosed.
if (LHS.isInvalid()) {
Expand Down
15 changes: 15 additions & 0 deletions clang/test/Sema/typo-correction.c
Expand Up @@ -65,3 +65,18 @@ int fn_with_rs(int r) { r = TYPO + r * TYPO; } // expected-error 2 {{use of unde
void fn_with_unknown(int a, int b) {
fn_with_unknown(unknown, unknown | unknown); // expected-error 3 {{use of undeclared identifier}}
}

// Two typos in a parenthesized expression or argument list with a conditional
// expression caused a crash in C mode.
//
// r272587 fixed a similar bug for binary operations. The same fix was needed for
// conditional expressions.

int g(int x, int y) {
return x + y;
}

int h() {
g(x, 5 ? z : 0); // expected-error 2 {{use of undeclared identifier}}
(x, 5 ? z : 0); // expected-error 2 {{use of undeclared identifier}}
}

0 comments on commit 4c922ab

Please sign in to comment.