OSDN Git Service

PR c++/28505
authorlmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Aug 2006 17:34:44 +0000 (17:34 +0000)
committerlmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 21 Aug 2006 17:34:44 +0000 (17:34 +0000)
        * decl.c (grokdeclarator): Return early after
        issuing diagnostic about an incomplete type.

        * g++.dg/parse/ctor7.C: New test.
        * g++.dg/parse/ctor8.C: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116302 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/ctor7.C [new file with mode: 0644]
gcc/testsuite/g++.dg/parse/ctor8.C [new file with mode: 0644]

index 366aa69..10d0538 100644 (file)
@@ -3,6 +3,10 @@
        PR c++/26269
         * decl.c (duplicate_decls): Return early if either
         newdecl or olddecl is error_mark_node.
+
+        PR c++/28505
+        * decl.c (grokdeclarator): Return early after
+        issuing diagnostic about an incomplete type.
        
 2006-08-20  Mark Mitchell  <mark@codesourcery.com>
 
index b67aea7..b5b417f 100644 (file)
@@ -8354,8 +8354,7 @@ grokdeclarator (const cp_declarator *declarator,
              error ("  in instantiation of template %qT",
                     current_class_type);
 
-           type = error_mark_node;
-           decl = NULL_TREE;
+           return error_mark_node;
          }
        else
          {
index d61c5ae..a277501 100644 (file)
@@ -2,6 +2,10 @@
 
         PR c++/26269
         * g++.dg/other/error14.C: New test.
+
+        PR c++/28505
+        * g++.dg/parse/ctor7.C: New test.
+        * g++.dg/parse/ctor8.C: Likewise.
        
 2006-08-21  Olivier Hainque  <hainque@adacore.com>
 
diff --git a/gcc/testsuite/g++.dg/parse/ctor7.C b/gcc/testsuite/g++.dg/parse/ctor7.C
new file mode 100644 (file)
index 0000000..9fa051b
--- /dev/null
@@ -0,0 +1,15 @@
+//PR c++/28505
+
+struct A
+{
+    A : ();     // { dg-error "primary-expression|incomplete type" }
+    A : (int);  // { dg-error "primary-expression|incomplete type|'int'" }
+};
+
+struct B
+{
+    char c;
+    A a;
+};
+
+B b = (B){0};   // { dg-error "compound-literals" }
diff --git a/gcc/testsuite/g++.dg/parse/ctor8.C b/gcc/testsuite/g++.dg/parse/ctor8.C
new file mode 100644 (file)
index 0000000..e43ce40
--- /dev/null
@@ -0,0 +1,9 @@
+//PR c++/28505
+
+struct A
+{
+    A : ();     // { dg-error "primary-expression|incomplete type" }
+    A : (int);  // { dg-error "primary-expression|incomplete type|'int'" }
+};
+
+A a = (A){0};   // { dg-error "too many initializers|compound-literals" }