From 6d90c6ab763058e7d342847debdf375ca077e476 Mon Sep 17 00:00:00 2001
From: lmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 21 Aug 2006 17:34:44 +0000
Subject: [PATCH]         PR c++/28505         * 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                   |  4 ++++
 gcc/cp/decl.c                      |  3 +--
 gcc/testsuite/ChangeLog            |  4 ++++
 gcc/testsuite/g++.dg/parse/ctor7.C | 15 +++++++++++++++
 gcc/testsuite/g++.dg/parse/ctor8.C |  9 +++++++++
 5 files changed, 33 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/g++.dg/parse/ctor7.C
 create mode 100644 gcc/testsuite/g++.dg/parse/ctor8.C

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 366aa69f8589..10d0538f80b6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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>
 
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index b67aea76a785..b5b417fc6688 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -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
 	  {
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d61c5ae9fd91..a277501ab34a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 000000000000..9fa051b79812
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/ctor7.C
@@ -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
index 000000000000..e43ce4023a4a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/ctor8.C
@@ -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" }
-- 
GitLab