From 6d90c6ab763058e7d342847debdf375ca077e476 Mon Sep 17 00:00:00 2001 From: lmillward <lmillward@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Mon, 21 Aug 2006 17:34:44 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116302 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/decl.c | 3 +-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/parse/ctor7.C | 15 +++++++++++++++ gcc/testsuite/g++.dg/parse/ctor8.C | 9 +++++++++ 5 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/parse/ctor7.C create mode 100644 gcc/testsuite/g++.dg/parse/ctor8.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 366aa69f8589..10d0538f80b6 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 b67aea76a785..b5b417fc6688 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 d61c5ae9fd91..a277501ab34a 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 000000000000..9fa051b79812 --- /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 000000000000..e43ce4023a4a --- /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" } -- GitLab