OSDN Git Service

* call.c (convert_like_real): Use the underlying type of the
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Sep 2010 23:55:35 +0000 (23:55 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Sep 2010 23:55:35 +0000 (23:55 +0000)
reference for the temporary.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164320 138bc75d-0d04-0410-961f-82ee72b054a4

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

index efa238a..27cb326 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-15  Jason Merrill  <jason@redhat.com>
+
+       * call.c (convert_like_real): Use the underlying type of the
+       reference for the temporary.
+
 2010-09-15  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/45635
index 37c6269..2b9b848 100644 (file)
@@ -5207,10 +5207,16 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
            || TREE_CODE (expr) == CONSTRUCTOR
            || TREE_CODE (expr) == VA_ARG_EXPR)
          {
-           tree type = convs->u.next->type;
+           /* Otherwise, a temporary of type "cv1 T1" is created and
+              initialized from the initializer expression using the rules
+              for a non-reference copy-initialization (8.5).  */
+
+           tree type = TREE_TYPE (ref_type);
            cp_lvalue_kind lvalue = real_lvalue_p (expr);
 
-           if (!CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (ref_type))
+           gcc_assert (same_type_ignoring_top_level_qualifiers_p
+                       (type, convs->u.next->type));
+           if (!CP_TYPE_CONST_NON_VOLATILE_P (type)
                && !TYPE_REF_IS_RVALUE (ref_type))
              {
                if (complain & tf_error)