aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@gcc.gnu.org>2008-12-04 14:00:03 -0500
committerJason Merrill <jason@gcc.gnu.org>2008-12-04 14:00:03 -0500
commitf782c65c3da796b4eb907daa55a160f1203ee5e6 (patch)
tree175fb67e45c27c46f67a8bee4a79a8b083beec40 /gcc/cp
parent1d9aba81050b524d9dd61e59f4b28382782051b3 (diff)
downloadgcc-f782c65c3da796b4eb907daa55a160f1203ee5e6.zip
gcc-f782c65c3da796b4eb907daa55a160f1203ee5e6.tar.gz
gcc-f782c65c3da796b4eb907daa55a160f1203ee5e6.tar.bz2
re PR c++/37906 (has_trivial_default_constructor vs. deleted copy ctor)
PR c++/37906 * decl.c (grok_special_member_properties): Set TYPE_HAS_COMPLEX_DFLT here. * class.c (check_bases_and_members): Rather than assuming any user-declared default constructor is complex here. From-SVN: r142442
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog10
-rw-r--r--gcc/cp/class.c3
-rw-r--r--gcc/cp/decl.c6
3 files changed, 15 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 029d2ad..9c74714 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,11 @@
+2008-12-04 Jason Merrill <jason@redhat.com>
+
+ PR c++/37906
+ * decl.c (grok_special_member_properties): Set TYPE_HAS_COMPLEX_DFLT
+ here.
+ * class.c (check_bases_and_members): Rather than assuming any
+ user-declared default constructor is complex here.
+
2008-12-04 Richard Guenther <rguenther@suse.de>
PR c++/38334
@@ -179,7 +187,7 @@
2008-11-05 Fabien Chene <fabien.chene@gmail.com>
- PR c++/35219
+ PR c++/32519
* cp-tree.h: Fix DECL_NONSTATIC_MEMBER_P to handle member template
functions.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 31123aa..8553139 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4301,8 +4301,7 @@ check_bases_and_members (tree t)
|= (CLASSTYPE_NON_AGGREGATE (t)
|| saved_nontrivial_dtor || saved_complex_asn_ref);
TYPE_HAS_COMPLEX_ASSIGN_REF (t) |= TYPE_CONTAINS_VPTR_P (t);
- TYPE_HAS_COMPLEX_DFLT (t)
- |= (TYPE_HAS_DEFAULT_CONSTRUCTOR (t) || TYPE_CONTAINS_VPTR_P (t));
+ TYPE_HAS_COMPLEX_DFLT (t) |= TYPE_CONTAINS_VPTR_P (t);
/* If the class has no user-declared constructor, but does have
non-static const or reference data members that can never be
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index f2e12b3..70ccd32 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -9842,7 +9842,11 @@ grok_special_member_properties (tree decl)
TYPE_HAS_CONST_INIT_REF (class_type) = 1;
}
else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
- TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
+ {
+ TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
+ if (TREE_CODE (decl) == TEMPLATE_DECL || !DECL_DEFAULTED_FN (decl))
+ TYPE_HAS_COMPLEX_DFLT (class_type) = 1;
+ }
else if (is_list_ctor (decl))
TYPE_HAS_LIST_CTOR (class_type) = 1;
}