aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/method.c1
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/init/synth2.C17
4 files changed, 25 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 98cca71..e909ba2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2009-11-05 Jason Merrill <jason@redhat.com>
+ PR c++/34180
+ * method.c (do_build_copy_constructor): Don't drop cv-quals from
+ the field type.
+
PR c++/7046
* class.c (finish_struct): Store maximum_field_alignment in
TYPE_PRECISION.
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index f13d99d..47f9e42 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -622,6 +622,7 @@ do_build_copy_constructor (tree fndecl)
if (DECL_MUTABLE_P (field))
quals &= ~TYPE_QUAL_CONST;
+ quals |= TYPE_QUALS (expr_type);
expr_type = cp_build_qualified_type (expr_type, quals);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6d1786a..2aba607 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2009-11-05 Jason Merrill <jason@redhat.com>
+ PR c++/34180
+ * g++.dg/init/synth2.C: New.
+
PR c++/7046
* g++.dg/abi/pragma-pack1.C: New.
diff --git a/gcc/testsuite/g++.dg/init/synth2.C b/gcc/testsuite/g++.dg/init/synth2.C
new file mode 100644
index 0000000..795ce42
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/synth2.C
@@ -0,0 +1,17 @@
+// PR c++/34180
+
+struct G {
+ G(); // { dg-message "" "candidate" }
+ G(G&); // { dg-message "" "candidate" }
+};
+
+class A
+{ // { dg-error "no match" }
+ const G g;
+};
+
+int main()
+{
+ A a;
+ A b = a; // { dg-message "required here" }
+}