diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-04-13 00:10:38 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-04-13 00:10:38 +0000 |
| commit | 0d6c061401d9b06cbcdc1cb3511d3b5332cee3d8 (patch) | |
| tree | 95ff8b24eb56ec4a323920be2b046123cdc061be | |
| parent | bc670459ad6f6c1e7c4491b4c937d8de22470d00 (diff) | |
| download | bcm5719-llvm-0d6c061401d9b06cbcdc1cb3511d3b5332cee3d8.tar.gz bcm5719-llvm-0d6c061401d9b06cbcdc1cb3511d3b5332cee3d8.zip | |
Improve error recovery for calls, fixing:
PR3972: Poor diagnostic with missing ')'
llvm-svn: 68932
| -rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 11 | ||||
| -rw-r--r-- | clang/test/Parser/expressions.c | 9 |
2 files changed, 16 insertions, 4 deletions
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 6713ca920ef..ebba576643b 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/lib/Parse/ParseExpr.cpp @@ -851,15 +851,20 @@ Parser::ParsePostfixExpressionSuffix(OwningExprResult LHS) { } // Match the ')'. - if (!LHS.isInvalid() && Tok.is(tok::r_paren)) { + if (Tok.isNot(tok::r_paren)) { + MatchRHSPunctuation(tok::r_paren, Loc); + return ExprError(); + } + + if (!LHS.isInvalid()) { assert((ArgExprs.size() == 0 || ArgExprs.size()-1 == CommaLocs.size())&& "Unexpected number of commas!"); LHS = Actions.ActOnCallExpr(CurScope, move(LHS), Loc, move_arg(ArgExprs), &CommaLocs[0], Tok.getLocation()); } - - MatchRHSPunctuation(tok::r_paren, Loc); + + ConsumeParen(); break; } case tok::arrow: // postfix-expression: p-e '->' identifier diff --git a/clang/test/Parser/expressions.c b/clang/test/Parser/expressions.c index 3f58ef3d51e..2b4d4636ebb 100644 --- a/clang/test/Parser/expressions.c +++ b/clang/test/Parser/expressions.c @@ -1,4 +1,4 @@ -// RUN: clang-cc -parse-noop %s +// RUN: clang-cc -parse-noop -verify %s void test1() { if (sizeof (int){ 1}); // sizeof compound literal @@ -41,3 +41,10 @@ int test_leading_extension() { __extension__ (*(char*)0) = 1; } +// PR3972 +int test5(int); +int test6(void) { + return test5( // expected-note {{to match}} + test5(1) + ; // expected-error {{expected ')'}} +} |

