diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 366aa69f8589382152bddaa1380d4782932faefc..10d0538f80b62f67bd0417c02554e142f524ae8b 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 b67aea76a785c8dd0f7387ce57fc82ecad44f9a6..b5b417fc6688d43afab7832b20d42048ce5f7452 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 d61c5ae9fd91c46124ac0643d9baf96c7712220b..a277501ab34a1d5d29308ca98cb879c76925d9a2 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 0000000000000000000000000000000000000000..9fa051b79812dcd0bc9c67d185f0c775bbd534ab
--- /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 0000000000000000000000000000000000000000..e43ce4023a4ac3e44facf493324ecf9809f97a2a
--- /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" }