summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-04-13 00:10:38 +0000
committerChris Lattner <sabre@nondot.org>2009-04-13 00:10:38 +0000
commit0d6c061401d9b06cbcdc1cb3511d3b5332cee3d8 (patch)
tree95ff8b24eb56ec4a323920be2b046123cdc061be
parentbc670459ad6f6c1e7c4491b4c937d8de22470d00 (diff)
downloadbcm5719-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.cpp11
-rw-r--r--clang/test/Parser/expressions.c9
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 ')'}}
+}
OpenPOWER on IntegriCloud