From: Chris Lattner Date: Mon, 13 Apr 2009 00:10:38 +0000 (+0000) Subject: Improve error recovery for calls, fixing: X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1721a2dfc05d081e76d6dd4755d52c96e093dabc;p=clang Improve error recovery for calls, fixing: PR3972: Poor diagnostic with missing ')' git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68932 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp index 6713ca920e..ebba576643 100644 --- a/lib/Parse/ParseExpr.cpp +++ b/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/test/Parser/expressions.c b/test/Parser/expressions.c index 3f58ef3d51..2b4d4636eb 100644 --- a/test/Parser/expressions.c +++ b/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 ')'}} +}