diff options
author | Lee Millward <lee.millward@codesourcery.com> | 2006-08-21 17:34:44 +0000 |
---|---|---|
committer | Lee Millward <lmillward@gcc.gnu.org> | 2006-08-21 17:34:44 +0000 |
commit | 623c65f1732d0ee0fc163921272d152b50211710 (patch) | |
tree | e3efba4f1de1ad3d07c448a7f2b11f92a2d02e31 /gcc | |
parent | 18ff35c669b4721876e3883e8c97b22683239a2e (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/decl.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/ctor7.C | 15 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/ctor8.C | 9 |
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" } |