aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorLee Millward <lee.millward@codesourcery.com>2006-08-21 17:34:44 +0000
committerLee Millward <lmillward@gcc.gnu.org>2006-08-21 17:34:44 +0000
commit623c65f1732d0ee0fc163921272d152b50211710 (patch)
treee3efba4f1de1ad3d07c448a7f2b11f92a2d02e31 /gcc
parent18ff35c669b4721876e3883e8c97b22683239a2e (diff)
downloadgcc-623c65f1732d0ee0fc163921272d152b50211710.zip
gcc-623c65f1732d0ee0fc163921272d152b50211710.tar.gz
gcc-623c65f1732d0ee0fc163921272d152b50211710.tar.bz2
re PR c++/28505 (ICE with invalid constructors)
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. From-SVN: r116302
Diffstat (limited to 'gcc')
-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" }