Hi,
On 01/15/2014 08:45 PM, Jason Merrill wrote:
On 01/15/2014 07:54 AM, Paolo Carlini wrote:
It seems Ok to me, and passes testing, to
return NULL_TREE from build_value_init. Alternately, more
conservatively, we could change build_value_init_noctor to not call
build_value_init at all when ftype == error_mark_node.
I think I would prefer that. I'm uncomfortable with returning NULL_TREE.
Ok then, I'm finishing testing the below.
Thanks,
Paolo.
//////////////////////
/cp
2014-01-15 Paolo Carlini <paolo.carl...@oracle.com>
PR c++/59270
* init.c (build_value_init_noctor): Don't pass error_mark_node to
build_value_init.
/testsuite
2014-01-15 Paolo Carlini <paolo.carl...@oracle.com>
PR c++/59270
* g++.dg/cpp0x/decltype-incomplete1.C: New.
Index: cp/init.c
===================================================================
--- cp/init.c (revision 206643)
+++ cp/init.c (working copy)
@@ -399,6 +399,9 @@ build_value_init_noctor (tree type, tsubst_flags_t
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: testsuite/g++.dg/cpp0x/decltype-incomplete1.C
===================================================================
--- testsuite/g++.dg/cpp0x/decltype-incomplete1.C (revision 0)
+++ testsuite/g++.dg/cpp0x/decltype-incomplete1.C (working copy)
@@ -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;