aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2004-01-16 17:54:25 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2004-01-16 17:54:25 +0000
commit1b6bfcd2ce1e9114684fdf78677edd2aa8615383 (patch)
tree698bbdc1f426564069ac00d68683d9b06bc0ff83 /gcc
parenta3fe7b56f3f0f153f9524f55bbcae9c65f127691 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/call.c8
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;