aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2014-10-10 16:27:07 -0400
committerJason Merrill <jason@gcc.gnu.org>2014-10-10 16:27:07 -0400
commitc6250f73ff88d48a49b377cfd0f4c4fe1779ea2d (patch)
tree19ab2a4528eee92a24e1d666b1c8a27e5edeb488 /gcc/cp
parentcfb71cadfd586194ba65150a1d535b8ad4229d22 (diff)
downloadgcc-c6250f73ff88d48a49b377cfd0f4c4fe1779ea2d.zip
gcc-c6250f73ff88d48a49b377cfd0f4c4fe1779ea2d.tar.gz
gcc-c6250f73ff88d48a49b377cfd0f4c4fe1779ea2d.tar.bz2
method.c (implicitly_declare_fn): Handle deleted lambda default ctor and copy assop here.
* method.c (implicitly_declare_fn): Handle deleted lambda default ctor and copy assop here. * class.c (check_bases_and_members): Not here. (add_implicitly_declared_members): And don't set CLASSTYPE_LAZY_MOVE_ASSIGN. From-SVN: r216105
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/class.c9
-rw-r--r--gcc/cp/method.c6
3 files changed, 13 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1414f2b..3e2ab6e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,11 @@
2014-10-10 Jason Merrill <jason@redhat.com>
+ * method.c (implicitly_declare_fn): Handle deleted lambda default
+ ctor and copy assop here.
+ * class.c (check_bases_and_members): Not here.
+ (add_implicitly_declared_members): And don't set
+ CLASSTYPE_LAZY_MOVE_ASSIGN.
+
* semantics.c (finish_id_expression): Check for error_mark_node.
2014-10-09 Jason Merrill <jason@redhat.com>
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 12ac30a..b661187 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -3158,7 +3158,7 @@ add_implicitly_declared_members (tree t, tree* access_decls,
TYPE_HAS_COPY_ASSIGN (t) = 1;
TYPE_HAS_CONST_COPY_ASSIGN (t) = !cant_have_const_assignment;
CLASSTYPE_LAZY_COPY_ASSIGN (t) = 1;
- if (move_ok)
+ if (move_ok && !LAMBDA_TYPE_P (t))
CLASSTYPE_LAZY_MOVE_ASSIGN (t) = 1;
}
@@ -5624,13 +5624,6 @@ check_bases_and_members (tree t)
if (LAMBDA_TYPE_P (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_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 8828986..dce2d2b 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1911,6 +1911,12 @@ implicitly_declare_fn (special_function_kind kind, tree type,
DECL_DEFAULTED_FN (fn) = 1;
if (cxx_dialect >= cxx11)
{
+ /* "The closure type associated with a lambda-expression has a deleted
+ default constructor and a deleted copy assignment operator." */
+ if ((kind == sfk_constructor
+ || kind == sfk_copy_assignment)
+ && LAMBDA_TYPE_P (type))
+ deleted_p = true;
DECL_DELETED_FN (fn) = deleted_p;
DECL_DECLARED_CONSTEXPR_P (fn) = constexpr_p;
}