]> granicus.if.org Git - clang/commitdiff
Fix PR3031 by silencing follow-on errors in invalid declarations.
authorChris Lattner <sabre@nondot.org>
Tue, 11 Nov 2008 06:13:16 +0000 (06:13 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 11 Nov 2008 06:13:16 +0000 (06:13 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59027 91177308-0d34-0410-b5e6-96231b3b80d8

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

index e3094ad7c6494f5d272b277685798ac09941f141..70d65f3b4820305882569e8240a00b95d308f4f5 100644 (file)
@@ -1494,6 +1494,7 @@ void Parser::ParseDirectDeclarator(Declarator &D) {
     else
       Diag(Tok, diag::err_expected_ident_lparen); // Expected identifier or '('.
     D.SetIdentifier(0, Tok.getLocation());
+    D.setInvalidType(true);
   }
   
   assert(D.isPastIdentifier() &&
index 6c71d508953dcb1a387ba9499b47d6f5b34b5ea9..879a79b633aec91c7d042f28c5c9b4cab4fa91de 100644 (file)
@@ -753,9 +753,10 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) {
   // 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;
   }
   
index 3e0380ea8786e621c45451132641913b1e4b7b9d..fb7704faf3d6e9c414c3767ea8da9de5efc9e1ba 100644 (file)
@@ -32,3 +32,7 @@ int test3(x,
 
 int test4(x, x) int x; {} /* expected-error {{redefinition of parameter 'x'}} */
 
+
+// PR3031
+int (test5), ;  // expected-error {{expected identifier or '('}}
+
index c08500834fb4e444f8202e520c1820d39ea1e74b..ff48b8f5286ea15e3a7f0306ada15f4ef2daa3c0 100644 (file)
@@ -16,7 +16,7 @@ int *h = &x;
 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}}
 }
 
 
index ccd3bc83659fcf462b3fd25f463a48ffb46ae860..efc199d39b0a90073175901371b4fe1e2a0f2019 100644 (file)
@@ -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}}
 }