OSDN Git Service

PR c++/13478
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Jan 2004 17:54:25 +0000 (17:54 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 16 Jan 2004 17:54:25 +0000 (17:54 +0000)
* 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

gcc/cp/ChangeLog
gcc/cp/call.c

index 3c41c9a..c2458ab 100644 (file)
@@ -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>
 
index 74878fd..aaf902c 100644 (file)
@@ -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;