aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabien Chêne <fabien@gcc.gnu.org>2011-05-09 19:42:21 +0200
committerFabien Chêne <fabien@gcc.gnu.org>2011-05-09 19:42:21 +0200
commit1c682d060b721d35ce3438e5d184a148e91599c9 (patch)
treee39462e9bc904dc0a764e8e128f8aae151b6ccc4
parent03808d178a46df619f8470211c4cff9946a51fd4 (diff)
downloadgcc-1c682d060b721d35ce3438e5d184a148e91599c9.zip
gcc-1c682d060b721d35ce3438e5d184a148e91599c9.tar.gz
gcc-1c682d060b721d35ce3438e5d184a148e91599c9.tar.bz2
Fix PR C++/48859
From-SVN: r173583
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/init.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/init/pr48859.C14
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4c4036a..04096de 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2011-05-07 Fabien Chêne <fabien@gcc.gnu.org>
+
+ PR c++/48859
+ * init.c (diagnose_uninitialized_cst_or_ref_member_1): stop the
+ recursion if there is user defined constructor.
+
2011-05-09 Jason Merrill <jason@redhat.com>
PR c++/34772
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index 7a7379e..3eb804d 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -1915,6 +1915,9 @@ diagnose_uninitialized_cst_or_ref_member_1 (tree type, tree origin,
field_type = strip_array_types (TREE_TYPE (field));
+ if (type_has_user_provided_constructor (field_type))
+ continue;
+
if (TREE_CODE (field_type) == REFERENCE_TYPE)
{
++ error_count;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b30addc..04885cd 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2001-05-07 Fabien Chêne <fabien@gcc.gnu.org>
+ PR c++/48859
+ * g++.dg/init/pr48859.C: New.
+
2011-05-09 Jason Merrill <jason@redhat.com>
* gcc.dg/gcc.dg/uninit-D.c: Move to c-c++-common.
diff --git a/gcc/testsuite/g++.dg/init/pr48859.C b/gcc/testsuite/g++.dg/init/pr48859.C
new file mode 100644
index 0000000..8ef5c2e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/pr48859.C
@@ -0,0 +1,14 @@
+// PR c++/48859
+// { dg-do compile }
+
+struct HasConstructor {
+ HasConstructor() {}
+};
+
+class ConstMember {
+ const HasConstructor empty_;
+};
+
+void foo() {
+ new ConstMember;
+}