]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/59270 ([c++11] ICE with decltype of a broken class)
authorPaolo Carlini <paolo.carlini@oracle.com>
Fri, 17 Jan 2014 20:25:01 +0000 (20:25 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 17 Jan 2014 20:25:01 +0000 (20:25 +0000)
/cp
2014-01-17  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59270
PR c++/58811
* init.c (build_value_init_noctor): Don't pass error_mark_node to
build_value_init.

/testsuite
2014-01-17  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/59270
PR c++/58811
* g++.dg/cpp0x/decltype-incomplete1.C: New.
* g++.dg/init/pr58811.C: Likewise.

From-SVN: r206731

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/decltype-incomplete1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/init/pr58811.C [new file with mode: 0644]

index 45a6c9778e82fb3947205738b765bc0d9686a9fe..0508ea07862acc418c3471e06c89fb18a6f25c81 100644 (file)
@@ -1,3 +1,10 @@
+2014-01-17  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/59270
+       PR c++/58811
+       * init.c (build_value_init_noctor): Don't pass error_mark_node to
+       build_value_init.
+
 2014-01-17  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/59269
index 931b5c8c1d2551444922eaf0788d5b4179d372f3..194a79777f4754298587d3d727fe37d90780acfd 100644 (file)
@@ -400,6 +400,9 @@ build_value_init_noctor (tree type, tsubst_flags_t complain)
 
              ftype = TREE_TYPE (field);
 
+             if (ftype == error_mark_node)
+               continue;
+
              /* We could skip vfields and fields of types with
                 user-defined constructors, but I think that won't improve
                 performance at all; it should be simpler in general just
index 5d80c8e9237b8a42ca60f0520cfb99591d7b6528..c471ae98aa948aa24cdb49e24be51a9f3720a3cd 100644 (file)
@@ -1,3 +1,10 @@
+2014-01-17  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/59270
+       PR c++/58811
+       * g++.dg/cpp0x/decltype-incomplete1.C: New.
+       * g++.dg/init/pr58811.C: Likewise.
+
 2014-01-17  Jeff Law  <law@redhat.com>
 
         PR middle-end/57904
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype-incomplete1.C b/gcc/testsuite/g++.dg/cpp0x/decltype-incomplete1.C
new file mode 100644 (file)
index 0000000..f46d0ba
--- /dev/null
@@ -0,0 +1,9 @@
+// PR c++/59270
+// { dg-do compile { target c++11 } }
+
+struct A
+{
+  struct B b; // { dg-error "incomplete type" }
+};
+
+decltype(A()) a;
diff --git a/gcc/testsuite/g++.dg/init/pr58811.C b/gcc/testsuite/g++.dg/init/pr58811.C
new file mode 100644 (file)
index 0000000..42e7fac
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/58811
+
+struct B
+{
+  struct A a; // { dg-error "incomplete type" }
+};
+
+void foo()
+{
+  B();
+}