aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/decl.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/parse/ctor7.C15
-rw-r--r--gcc/testsuite/g++.dg/parse/ctor8.C9
5 files changed, 33 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 366aa69..10d0538 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 b67aea7..b5b417f 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 d61c5ae..a277501 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 0000000..9fa051b
--- /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 0000000..e43ce40
--- /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" }