re PR c++/60572 (ICE deriving from class with invalid member)
authorJakub Jelinek <jakub@redhat.com>
Thu, 20 Mar 2014 19:45:09 +0000 (20:45 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 20 Mar 2014 19:45:09 +0000 (20:45 +0100)
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
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/init/pr60572.C [new file with mode: 0644]

index 655f6d4152b633a933c9587e350c31938db15fbc..3d043d95f1300393f6cba12251b293019f51b737 100644 (file)
@@ -1,3 +1,9 @@
+2014-03-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/60572
+       * init.c (build_zero_init_1): Ignore fields with error_mark_node
+       type.
+
 2014-03-19  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/51474
index 7f5d04539a5e5d0fd8f28f5dcc4806d4e03ff0b7..2e1cddef48ace7c8055406d8db00d9114c6409c6 100644 (file)
@@ -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.  */
index f6118fd817a5ebf985b5da8ea6ef9c42f1748990..3cadcfea47ca9ea1bd01cd57379aed96e015cde2 100644 (file)
@@ -1,3 +1,8 @@
+2014-03-20  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/60572
+       * g++.dg/init/pr60572.C: New test.
+
 2014-03-20  Zhenqiang Chen  <zhenqiang.chen@linaro.org>
 
        * 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 (file)
index 0000000..a39dfa0
--- /dev/null
@@ -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 () {}
+};