diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-01-16 16:59:30 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2004-01-16 16:59:30 +0000 |
commit | ab8ffc795c01db35bc620c7f22a2c5236ba958c2 (patch) | |
tree | 879517ea24b96ba333e7228a05258a2dfd305570 | |
parent | 1620182354162f6874db4ba80189cc6d462e76ad (diff) | |
download | gcc-ab8ffc795c01db35bc620c7f22a2c5236ba958c2.zip gcc-ab8ffc795c01db35bc620c7f22a2c5236ba958c2.tar.gz gcc-ab8ffc795c01db35bc620c7f22a2c5236ba958c2.tar.bz2 |
re PR c++/13478 (gcc uses wrong constructor to initialize a const reference)
PR c++/13478
* call.c (convert_like_real): Do not perform an additional
direct-initialization when binding to a reference.
PR c++/13478
* g++.dg/init/ref10.C: New test.
From-SVN: r75979
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/call.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/ref10.C | 14 |
4 files changed, 26 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a902c25..3c41c9a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-01-16 Mark Mitchell <mark@codesourcery.com> + + PR c++/13478 + * call.c (convert_like_real): Do not perform an additional + direct-initialization when binding to a reference. + 2004-01-15 Giovanni Bajo <giovannibajo@gcc.gnu.org> PR c++/13407 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 26ca488..74878fd 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4068,8 +4068,7 @@ convert_like_real (tree convs, tree expr, tree fn, int argnum, int inner, conversion, but is not considered during overload resolution. If the target is a class, that means call a ctor. */ - if (IS_AGGR_TYPE (totype) - && (inner >= 0 || !lvalue_p (expr))) + if (IS_AGGR_TYPE (totype) && inner >= 0) { expr = (build_temp (expr, totype, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3136eda..a9f2858 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-01-16 Mark Mitchell <mark@codesourcery.com> + + PR c++/13478 + * g++.dg/init/ref10.C: New test. + 2004-01-15 Giovanni Bajo <giovannibajo@gcc.gnu.org> PR c++/13407 diff --git a/gcc/testsuite/g++.dg/init/ref10.C b/gcc/testsuite/g++.dg/init/ref10.C new file mode 100644 index 0000000..73fd6de --- /dev/null +++ b/gcc/testsuite/g++.dg/init/ref10.C @@ -0,0 +1,14 @@ +// PR c++/13478 + +struct A {}; +struct B : protected A { + B() {}; + B(const A& ) {}; +private: + B(const B& ) {}; +}; + +void foo(const A* ap) +{ + const B& br = *ap; +} |