[cfe-commits] r68932 - in /cfe/trunk: lib/Parse/ParseExpr.cpp test/Parser/expressions.c

Chris Lattner sabre at nondot.org
Sun Apr 12 17:10:40 PDT 2009


Author: lattner
Date: Sun Apr 12 19:10:38 2009
New Revision: 68932

URL: http://llvm.org/viewvc/llvm-project?rev=68932&view=rev
Log:
Improve error recovery for calls, fixing:
PR3972: Poor diagnostic with missing ')'

Modified:
    cfe/trunk/lib/Parse/ParseExpr.cpp
    cfe/trunk/test/Parser/expressions.c

Modified: cfe/trunk/lib/Parse/ParseExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseExpr.cpp?rev=68932&r1=68931&r2=68932&view=diff

==============================================================================
--- cfe/trunk/lib/Parse/ParseExpr.cpp (original)
+++ cfe/trunk/lib/Parse/ParseExpr.cpp Sun Apr 12 19:10:38 2009
@@ -851,15 +851,20 @@
       }
 
       // 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

Modified: cfe/trunk/test/Parser/expressions.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/expressions.c?rev=68932&r1=68931&r2=68932&view=diff

==============================================================================
--- cfe/trunk/test/Parser/expressions.c (original)
+++ cfe/trunk/test/Parser/expressions.c Sun Apr 12 19:10:38 2009
@@ -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 @@
   __extension__ (*(char*)0) = 1;
 }
 
+// PR3972
+int test5(int);
+int test6(void) { 
+  return test5(      // expected-note {{to match}}
+               test5(1)
+                 ; // expected-error {{expected ')'}}
+}





More information about the cfe-commits mailing list