aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2010-06-29 20:51:29 -0400
committerJason Merrill <jason@gcc.gnu.org>2010-06-29 20:51:29 -0400
commit54ca9930b79c8f759919fdbe671ff24ce4141b0c (patch)
tree9475890307f4ab29171a55ba449382044eb779cb /gcc/cp
parent9a71b305bf556ad173b123d2d58612652b82e6dc (diff)
downloadgcc-54ca9930b79c8f759919fdbe671ff24ce4141b0c.zip
gcc-54ca9930b79c8f759919fdbe671ff24ce4141b0c.tar.gz
gcc-54ca9930b79c8f759919fdbe671ff24ce4141b0c.tar.bz2
Enable implicitly deleted functions (N2346)
Enable implicitly deleted functions (N2346) * class.c (check_bases_and_members): Adjust lambda flags. * method.c (implicitly_declare_fn): Set DECL_DELETED_FN if appropriate. From-SVN: r161581
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/class.c7
-rw-r--r--gcc/cp/method.c2
3 files changed, 9 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 9ac64c4..8c9b424 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2010-06-29 Jason Merrill <jason@redhat.com>
+ Enable implicitly deleted functions (N2346)
+ * class.c (check_bases_and_members): Adjust lambda flags.
+ * method.c (implicitly_declare_fn): Set DECL_DELETED_FN if appropriate.
+
* decl2.c (mark_used): Adjust error for use of deleted function.
Machinery to support implicit delete/move.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 6f6aab6..031a4ea 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4563,10 +4563,9 @@ check_bases_and_members (tree t)
/* "The closure type associated with a lambda-expression has a deleted
default constructor and a deleted copy assignment operator." */
TYPE_NEEDS_CONSTRUCTING (t) = 1;
- TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
- CLASSTYPE_LAZY_DEFAULT_CTOR (t) = 0;
- TYPE_HAS_COPY_ASSIGN (t) = 0;
- CLASSTYPE_LAZY_COPY_ASSIGN (t) = 0;
+ TYPE_HAS_COMPLEX_DFLT (t) = 1;
+ TYPE_HAS_COMPLEX_COPY_ASSIGN (t) = 1;
+ CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 0;
/* "This class type is not an aggregate." */
CLASSTYPE_NON_AGGREGATE (t) = 1;
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 64f7b7f..ad41e9a 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1408,6 +1408,8 @@ implicitly_declare_fn (special_function_kind kind, tree type, bool const_p)
DECL_IN_AGGR_P (fn) = 1;
DECL_ARTIFICIAL (fn) = 1;
DECL_DEFAULTED_FN (fn) = 1;
+ if (cxx_dialect >= cxx0x)
+ DECL_DELETED_FN (fn) = deleted_p;
DECL_NOT_REALLY_EXTERN (fn) = 1;
DECL_DECLARED_INLINE_P (fn) = 1;
gcc_assert (!TREE_USED (fn));