diff options
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/method.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/synth2.C | 17 |
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" } +} |