From 11f18e1dafa5d79dba18bc10523deb6307b201c4 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 5 Nov 2009 23:32:13 -0500 Subject: [PATCH] re PR c++/34180 (Default copy constructor copies const auto_ptr members) PR c++/34180 * method.c (do_build_copy_constructor): Don't drop cv-quals from the field type. From-SVN: r153960 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/method.c | 1 + gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/init/synth2.C | 17 +++++++++++++++++ 4 files changed, 25 insertions(+) create mode 100644 gcc/testsuite/g++.dg/init/synth2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 98cca71b56c0..e909ba22396a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2009-11-05 Jason Merrill + 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 f13d99df20f7..47f9e424dbde 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 6d1786aa17b2..2aba6077d226 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2009-11-05 Jason Merrill + 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 000000000000..795ce42893c8 --- /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" } +} -- 2.43.5