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" }