Patchwork C++ PATCH to deal with trivial but non-callable [cd]tors

login
register
mail settings
Submitter Jason Merrill
Date Oct. 31, 2013, 2:13 p.m.
Message ID <52726574.6050704@redhat.com>
Download mbox | patch
Permalink /patch/287500/
State New
Headers show

Comments

Jason Merrill - Oct. 31, 2013, 2:13 p.m.
On 10/25/2013 03:04 PM, Jason Merrill wrote:
> In C++ all classes have destructors, but we try to defer building the
> implicit declaration.  My patch causes us to build those implicit
> declarations more often, which is probably a bit of a memory regression,

We can still avoid doing this in C++98 mode.

Tested x86_64-pc-linux-gnu, applying to trunk.

Patch

commit 7b8a53224af20adaa67a3df38523fcc0051cec3d
Author: Jason Merrill <jason@redhat.com>
Date:   Thu Oct 31 09:39:54 2013 -0400

    	* class.c (type_build_ctor_call): Return early in C++98 mode.
    	(type_build_dtor_call): Likewise.

diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 43f90d7..64681ba 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -5163,6 +5163,8 @@  type_build_ctor_call (tree t)
     return false;
   if (!TYPE_HAS_DEFAULT_CONSTRUCTOR (inner))
     return true;
+  if (cxx_dialect < cxx11)
+    return false;
   /* A user-declared constructor might be private, and a constructor might
      be trivial but deleted.  */
   for (tree fns = lookup_fnfields_slot (inner, complete_ctor_identifier);
@@ -5188,6 +5190,8 @@  type_build_dtor_call (tree t)
   if (!CLASS_TYPE_P (inner) || ANON_AGGR_TYPE_P (inner)
       || !COMPLETE_TYPE_P (inner))
     return false;
+  if (cxx_dialect < cxx11)
+    return false;
   /* A user-declared destructor might be private, and a destructor might
      be trivial but deleted.  */
   for (tree fns = lookup_fnfields_slot (inner, complete_dtor_identifier);