diff options
author | Jason Merrill <jason@redhat.com> | 2010-06-29 20:51:29 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-06-29 20:51:29 -0400 |
commit | 54ca9930b79c8f759919fdbe671ff24ce4141b0c (patch) | |
tree | 9475890307f4ab29171a55ba449382044eb779cb /gcc/cp | |
parent | 9a71b305bf556ad173b123d2d58612652b82e6dc (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/class.c | 7 | ||||
-rw-r--r-- | gcc/cp/method.c | 2 |
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)); |