aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-11-17 11:35:11 -0500
committerJason Merrill <jason@gcc.gnu.org>2011-11-17 11:35:11 -0500
commit830dea94f2bfdf797d368aa71d7bccb4fc215431 (patch)
tree90ab680bdfeecc66248d3b1aec35d367483a3032 /gcc
parenta8e237782fe24e86b8f166454a0441e05d492631 (diff)
downloadgcc-830dea94f2bfdf797d368aa71d7bccb4fc215431.zip
gcc-830dea94f2bfdf797d368aa71d7bccb4fc215431.tar.gz
gcc-830dea94f2bfdf797d368aa71d7bccb4fc215431.tar.bz2
class.c (add_implicitly_declared_members): Update move conditions.
N3203 * class.c (add_implicitly_declared_members): Update move conditions. From-SVN: r181445
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/class.c11
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3807f9a..89f845e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2011-11-17 Jason Merrill <jason@redhat.com>
+ N3203
+ * class.c (add_implicitly_declared_members): Update move
+ conditions.
+
PR c++/51137
* class.c (build_base_path): Don't do calculation in templates.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 0765817..cb0e683 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -2721,6 +2721,13 @@ add_implicitly_declared_members (tree t,
int cant_have_const_cctor,
int cant_have_const_assignment)
{
+ bool move_ok = false;
+
+ if (cxx_dialect >= cxx0x && !CLASSTYPE_DESTRUCTORS (t)
+ && !TYPE_HAS_COPY_CTOR (t) && !TYPE_HAS_COPY_ASSIGN (t)
+ && !type_has_move_constructor (t) && !type_has_move_assign (t))
+ move_ok = true;
+
/* Destructor. */
if (!CLASSTYPE_DESTRUCTORS (t))
{
@@ -2758,7 +2765,7 @@ add_implicitly_declared_members (tree t,
TYPE_HAS_COPY_CTOR (t) = 1;
TYPE_HAS_CONST_COPY_CTOR (t) = !cant_have_const_cctor;
CLASSTYPE_LAZY_COPY_CTOR (t) = 1;
- if (cxx_dialect >= cxx0x && !type_has_move_constructor (t))
+ if (move_ok)
CLASSTYPE_LAZY_MOVE_CTOR (t) = 1;
}
@@ -2771,7 +2778,7 @@ add_implicitly_declared_members (tree t,
TYPE_HAS_COPY_ASSIGN (t) = 1;
TYPE_HAS_CONST_COPY_ASSIGN (t) = !cant_have_const_assignment;
CLASSTYPE_LAZY_COPY_ASSIGN (t) = 1;
- if (cxx_dialect >= cxx0x && !type_has_move_assign (t))
+ if (move_ok)
CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1;
}