DR 1579 PR c++/58051

gcc/cp:
	DR 1579
	PR c++/58051
	* typeck.c (check_return_expr): Lookup as an rvalue even when the
	types aren't the same.

gcc/testsuite:
	* g++.dg/cpp0x/elision_conv.C: New.

From-SVN: r212099
This commit is contained in:
Jonathan Wakely 2014-06-28 08:45:27 +01:00 committed by Jonathan Wakely
parent c02e185174
commit fb682f9458
4 changed files with 30 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2014-06-28 Jonathan Wakely <jwakely@redhat.com>
DR 1579
PR c++/58051
* typeck.c (check_return_expr): Lookup as an rvalue even when the
types aren't the same.
2014-06-27 Jason Merrill <jason@redhat.com>
PR c++/61433

View File

@ -8607,7 +8607,7 @@ check_return_expr (tree retval, bool *no_warning)
if (VOID_TYPE_P (functype))
return error_mark_node;
/* Under C++0x [12.8/16 class.copy], a returned lvalue is sometimes
/* Under C++11 [12.8/32 class.copy], a returned lvalue is sometimes
treated as an rvalue for the purposes of overload resolution to
favor move constructors over copy constructors.
@ -8618,8 +8618,6 @@ check_return_expr (tree retval, bool *no_warning)
|| TREE_CODE (retval) == PARM_DECL)
&& DECL_CONTEXT (retval) == current_function_decl
&& !TREE_STATIC (retval)
&& same_type_p ((TYPE_MAIN_VARIANT (TREE_TYPE (retval))),
(TYPE_MAIN_VARIANT (functype)))
/* This is only interesting for class type. */
&& CLASS_TYPE_P (functype))
flags = flags | LOOKUP_PREFER_RVALUE;

View File

@ -1,3 +1,7 @@
2014-06-28 Jonathan Wakely <jwakely@redhat.com>
* g++.dg/cpp0x/elision_conv.C: New.
2014-06-27 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* gfortran.dg/nint_2.f90: Don't XFAIL for powerpc64le-*-linux*.

View File

@ -0,0 +1,18 @@
// Core 1579 return by converting move constructor
// PR c++/58051
// { dg-do compile { target c++11 } }
struct A {
A() = default;
A(A&&) = default;
};
struct B {
B(A) { }
};
B f()
{
A a;
return a;
}