diff options
| author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-16 17:54:25 +0000 |
|---|---|---|
| committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-16 17:54:25 +0000 |
| commit | 297635f0a9bf394da74a3054d24cb8b0ea21f0bd (patch) | |
| tree | 698bbdc1f426564069ac00d68683d9b06bc0ff83 /gcc | |
| parent | b7ec8e346bea007bbc2a33d9dba08b741e857f6b (diff) | |
| download | ppe42-gcc-297635f0a9bf394da74a3054d24cb8b0ea21f0bd.tar.gz ppe42-gcc-297635f0a9bf394da74a3054d24cb8b0ea21f0bd.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@75983 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
| -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 3c41c9a2585..c2458abfe86 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 74878fd5cdc..aaf902ceed6 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; |

