From 7614d42cb4103e495f1d91c9c71bf8feae4bae69 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 20 Mar 2014 20:45:09 +0100 Subject: [PATCH] re PR c++/60572 (ICE deriving from class with invalid member) PR c++/60572 * init.c (build_zero_init_1): Ignore fields with error_mark_node type. * g++.dg/init/pr60572.C: New test. From-SVN: r208734 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/init.c | 3 +++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/init/pr60572.C | 13 +++++++++++++ 4 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/g++.dg/init/pr60572.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 655f6d4152b..3d043d95f13 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-03-20 Jakub Jelinek + + PR c++/60572 + * init.c (build_zero_init_1): Ignore fields with error_mark_node + type. + 2014-03-19 Paolo Carlini PR c++/51474 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 7f5d04539a5..2e1cddef48a 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -192,6 +192,9 @@ build_zero_init_1 (tree type, tree nelts, bool static_storage_p, if (TREE_CODE (field) != FIELD_DECL) continue; + if (TREE_TYPE (field) == error_mark_node) + continue; + /* Don't add virtual bases for base classes if they are beyond the size of the current field, that means it is present somewhere else in the object. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f6118fd817a..3cadcfea47c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-03-20 Jakub Jelinek + + PR c++/60572 + * g++.dg/init/pr60572.C: New test. + 2014-03-20 Zhenqiang Chen * gcc.target/arm/neon-modes-3.c: Add "-g" option. diff --git a/gcc/testsuite/g++.dg/init/pr60572.C b/gcc/testsuite/g++.dg/init/pr60572.C new file mode 100644 index 00000000000..a39dfa09a65 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/pr60572.C @@ -0,0 +1,13 @@ +// PR c++/60572 +// { dg-do compile } + +struct A +{ + A x; // { dg-error "incomplete type" } + virtual ~A () {} +}; + +struct B : A +{ + B () : A () {} +}; -- 2.30.2