diff options
author | Mark Mitchell <mark@codesourcery.com> | 2004-01-16 17:54:25 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2004-01-16 17:54:25 +0000 |
commit | 1b6bfcd2ce1e9114684fdf78677edd2aa8615383 (patch) | |
tree | 698bbdc1f426564069ac00d68683d9b06bc0ff83 | |
parent | a3fe7b56f3f0f153f9524f55bbcae9c65f127691 (diff) | |
download | gcc-1b6bfcd2ce1e9114684fdf78677edd2aa8615383.zip gcc-1b6bfcd2ce1e9114684fdf78677edd2aa8615383.tar.gz gcc-1b6bfcd2ce1e9114684fdf78677edd2aa8615383.tar.bz2 |
re PR c++/13478 (gcc uses wrong constructor to initialize a const reference)
PR c++/13478
* call.c (initialize_reference): Pass -1 for inner parameter to
convert_like_real.
PR c++/13478
* g++.dg/init/ref10.C: New test.
From-SVN: r75983
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/call.c | 8 |
2 files changed, 8 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3c41c9a..c2458ab 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,8 +1,8 @@ 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. + * call.c (initialize_reference): Pass -1 for inner parameter to + convert_like_real. 2004-01-15 Giovanni Bajo <giovannibajo@gcc.gnu.org> diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 74878fd..aaf902c 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4068,7 +4068,8 @@ 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) + if (IS_AGGR_TYPE (totype) + && (inner >= 0 || !lvalue_p (expr))) { expr = (build_temp (expr, totype, @@ -6250,7 +6251,10 @@ initialize_reference (tree type, tree expr, tree decl, tree *cleanup) else base_conv_type = NULL_TREE; /* Perform the remainder of the conversion. */ - expr = convert_like (conv, expr); + expr = convert_like_real (conv, expr, + /*fn=*/NULL_TREE, /*argnum=*/0, + /*inner=*/-1, + /*issue_conversion_warnings=*/true); if (!real_lvalue_p (expr)) { tree init; |