diff options
author | Kaelyn Takata <rikka@google.com> | 2014-11-21 18:48:04 +0000 |
---|---|---|
committer | Kaelyn Takata <rikka@google.com> | 2014-11-21 18:48:04 +0000 |
commit | 1586782767938df3a20f7abc4d8335c48b100bc4 (patch) | |
tree | bc2c6281441ded961ccc6d525197217b529e05c6 /clang/lib/Parse/ParseExpr.cpp | |
parent | 4c3ffc4fef388ff9b2b9b92b25bbd4960f337dfa (diff) | |
download | bcm5719-llvm-1586782767938df3a20f7abc4d8335c48b100bc4.tar.gz bcm5719-llvm-1586782767938df3a20f7abc4d8335c48b100bc4.zip |
Enable ActOnIdExpression to use delayed typo correction for non-C++ code
when calling DiagnoseEmptyLookup.
llvm-svn: 222551
Diffstat (limited to 'clang/lib/Parse/ParseExpr.cpp')
-rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 3d57ba9cbe0..43929c0bcf2 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -910,6 +910,7 @@ ExprResult Parser::ParseCastExpression(bool isUnaryExpression, auto Validator = llvm::make_unique<CastExpressionIdValidator>( isTypeCast != NotTypeCast, isTypeCast != IsTypeCast); Validator->IsAddressOfOperand = isAddressOfOperand; + Validator->WantRemainingKeywords = Tok.isNot(tok::r_paren); Name.setIdentifier(&II, ILoc); Res = Actions.ActOnIdExpression( getCurScope(), ScopeSpec, TemplateKWLoc, Name, Tok.is(tok::l_paren), @@ -2513,10 +2514,19 @@ bool Parser::ParseExpressionList(SmallVectorImpl<Expr*> &Exprs, } if (Tok.isNot(tok::comma)) - return SawError; + break; // Move to the next argument, remember where the comma was. CommaLocs.push_back(ConsumeToken()); } + if (SawError) { + // Ensure typos get diagnosed when errors were encountered while parsing the + // expression list. + for (auto &E : Exprs) { + ExprResult Expr = Actions.CorrectDelayedTyposInExpr(E); + if (Expr.isUsable()) E = Expr.get(); + } + } + return SawError; } /// ParseSimpleExpressionList - A simple comma-separated list of expressions, |