зеркало из https://github.com/microsoft/clang.git
[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:
Родитель
c6c456a271
Коммит
ad0288b56d
|
@ -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}}
|
||||
};
|
||||
|
|
Загрузка…
Ссылка в новой задаче