[C++ Patch/RFC] PR 60047

Paolo Carlini paolo.carlini@oracle.com
Tue Feb 4 11:51:00 GMT 2014


Hi,

thus I tried to have a look to this issue, while experiencing some weird 
problems with the debugger, which slowed me down a lot. I have been able 
to figure out that we don't seem to actively set constexpr_p to true 
anywhere in implicitly_declare_fn (besides the unrelated case of 
inheriting constructors), thus I'm wondering if it would make sense to 
simply do the below?!? (and revert my recent tweak)

Otherwise, Jason, if you suspect something deeper is going on, I would 
rather ask you to take over, today the debugger is still misbehaving on 
me :(

Thanks!
Paolo.

//////////////////////////
-------------- next part --------------
Index: cp/method.c
===================================================================
--- cp/method.c	(revision 207457)
+++ cp/method.c	(working copy)
@@ -1366,7 +1366,7 @@ synthesized_method_walk (tree ctype, special_funct
     }
 
   vbases = CLASSTYPE_VBASECLASSES (ctype);
-  if (vec_safe_is_empty (vbases))
+  if (vbases == NULL)
     /* No virtual bases to worry about.  */;
   else if (!assign_p)
     {
@@ -1660,7 +1660,7 @@ implicitly_declare_fn (special_function_kind kind,
   else if (trivial_p && cxx_dialect >= cxx11
 	   && (kind == sfk_copy_constructor
 	       || kind == sfk_move_constructor))
-    gcc_assert (constexpr_p);
+    constexpr_p = true;
 
   if (!trivial_p && type_has_trivial_fn (type, kind))
     type_set_nontrivial_flag (type, kind);
Index: testsuite/g++.dg/cpp0x/pr60047.C
===================================================================
--- testsuite/g++.dg/cpp0x/pr60047.C	(revision 0)
+++ testsuite/g++.dg/cpp0x/pr60047.C	(working copy)
@@ -0,0 +1,14 @@
+// PR c++/60047
+// { dg-do compile { target c++11 } }
+
+struct B { };
+
+template<typename T> struct A : virtual B
+{
+  A();
+  A(const A&);
+};
+
+template<typename T> A<T>::A(const A<T>&) = default;
+
+A<int> a = A<int>();


More information about the Gcc-patches mailing list