[Parse] Make sure we don't forget to diagnose typos in exprs

If ActOn*Op fails, we will forget to diagnose typos in the LHS of
expressions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@261191 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
David Majnemer 2016-02-18 06:37:44 +00:00
Родитель c6c456a271
Коммит ad0288b56d
2 изменённых файлов: 12 добавлений и 3 удалений

Просмотреть файл

@ -431,6 +431,7 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
}
}
ExprResult OrigLHS = LHS;
if (!LHS.isInvalid()) {
// Combine the LHS and RHS into the LHS (e.g. build AST).
if (TernaryMiddle.isInvalid()) {
@ -445,12 +446,15 @@ Parser::ParseRHSOfBinaryExpression(ExprResult LHS, prec::Level MinPrec) {
LHS = Actions.ActOnBinOp(getCurScope(), OpToken.getLocation(),
OpToken.getKind(), LHS.get(), RHS.get());
} else
} else {
LHS = Actions.ActOnConditionalOp(OpToken.getLocation(), ColonLoc,
LHS.get(), TernaryMiddle.get(),
RHS.get());
} else {
// Ensure potential typos aren't left undiagnosed.
}
}
// Ensure potential typos aren't left undiagnosed.
if (LHS.isInvalid()) {
Actions.CorrectDelayedTyposInExpr(OrigLHS);
Actions.CorrectDelayedTyposInExpr(TernaryMiddle);
Actions.CorrectDelayedTyposInExpr(RHS);
}

Просмотреть файл

@ -665,3 +665,8 @@ using C::D::Foofoo; // expected-error {{no member named 'Foofoo' in namespace '
}
int d = ? L : d; // expected-error {{expected expression}} expected-error {{undeclared identifier}}
struct B0 {
int : 0 | // expected-error {{invalid operands to binary expression}}
(struct B0)e; // expected-error {{use of undeclared identifier}}
};