[cfe-commits] r59027 - in /cfe/trunk: lib/Parse/ParseDecl.cpp lib/Sema/SemaDecl.cpp test/Parser/declarators.c test/Sema/init.c test/Sema/invalid-decl.c

Chris Lattner sabre at nondot.org
Mon Nov 10 22:13:16 PST 2008


Author: lattner
Date: Tue Nov 11 00:13:16 2008
New Revision: 59027

URL: http://llvm.org/viewvc/llvm-project?rev=59027&view=rev
Log:
Fix PR3031 by silencing follow-on errors in invalid declarations.

Modified:
    cfe/trunk/lib/Parse/ParseDecl.cpp
    cfe/trunk/lib/Sema/SemaDecl.cpp
    cfe/trunk/test/Parser/declarators.c
    cfe/trunk/test/Sema/init.c
    cfe/trunk/test/Sema/invalid-decl.c

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

==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Tue Nov 11 00:13:16 2008
@@ -1494,6 +1494,7 @@
     else
       Diag(Tok, diag::err_expected_ident_lparen); // Expected identifier or '('.
     D.SetIdentifier(0, Tok.getLocation());
+    D.setInvalidType(true);
   }
   
   assert(D.isPastIdentifier() &&

Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=59027&r1=59026&r2=59027&view=diff

==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Nov 11 00:13:16 2008
@@ -753,9 +753,10 @@
   // All of these full declarators require an identifier.  If it doesn't have
   // one, the ParsedFreeStandingDeclSpec action should be used.
   if (II == 0) {
-    Diag(D.getDeclSpec().getSourceRange().getBegin(),
-         diag::err_declarator_need_ident,
-         D.getDeclSpec().getSourceRange(), D.getSourceRange());
+    if (!D.getInvalidType())  // Reject this if we think it is valid.
+      Diag(D.getDeclSpec().getSourceRange().getBegin(),
+           diag::err_declarator_need_ident,
+           D.getDeclSpec().getSourceRange(), D.getSourceRange());
     return 0;
   }
   

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

==============================================================================
--- cfe/trunk/test/Parser/declarators.c (original)
+++ cfe/trunk/test/Parser/declarators.c Tue Nov 11 00:13:16 2008
@@ -32,3 +32,7 @@
 
 int test4(x, x) int x; {} /* expected-error {{redefinition of parameter 'x'}} */
 
+
+// PR3031
+int (test5), ;  // expected-error {{expected identifier or '('}}
+

Modified: cfe/trunk/test/Sema/init.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/init.c?rev=59027&r1=59026&r2=59027&view=diff

==============================================================================
--- cfe/trunk/test/Sema/init.c (original)
+++ cfe/trunk/test/Sema/init.c Tue Nov 11 00:13:16 2008
@@ -16,7 +16,7 @@
 int test() {
 int a[10];
 int b[10] = a; // expected-error {{initialization with "{...}" expected}}
-int +; // expected-error {{expected identifier or '('}} expected-error {{declarator requires an identifier}} expected-error {{parse error}}
+int +; // expected-error {{expected identifier or '('}} expected-error {{parse error}}
 }
 
 

Modified: cfe/trunk/test/Sema/invalid-decl.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/invalid-decl.c?rev=59027&r1=59026&r2=59027&view=diff

==============================================================================
--- cfe/trunk/test/Sema/invalid-decl.c (original)
+++ cfe/trunk/test/Sema/invalid-decl.c Tue Nov 11 00:13:16 2008
@@ -1,8 +1,7 @@
 // RUN: clang %s -fsyntax-only -verify
 
 void test() {
-    char = 4;  // expected-error {{expected identifier}} expected-error{{declarator requires an identifier}}
-
+    char = 4;  // expected-error {{expected identifier}}
 }
 
 





More information about the cfe-commits mailing list