From 54ca9930b79c8f759919fdbe671ff24ce4141b0c Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 29 Jun 2010 20:51:29 -0400 Subject: 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 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/class.c | 7 +++---- gcc/cp/method.c | 2 ++ 3 files changed, 9 insertions(+), 4 deletions(-) (limited to 'gcc/cp') 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 + 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)); -- cgit v1.1