Commit fb682f94 by Jonathan Wakely Committed by Jonathan Wakely

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
parent c02e1851
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> 2014-06-27 Jason Merrill <jason@redhat.com>
PR c++/61433 PR c++/61433
......
...@@ -8607,7 +8607,7 @@ check_return_expr (tree retval, bool *no_warning) ...@@ -8607,7 +8607,7 @@ check_return_expr (tree retval, bool *no_warning)
if (VOID_TYPE_P (functype)) if (VOID_TYPE_P (functype))
return error_mark_node; 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 treated as an rvalue for the purposes of overload resolution to
favor move constructors over copy constructors. favor move constructors over copy constructors.
...@@ -8618,8 +8618,6 @@ check_return_expr (tree retval, bool *no_warning) ...@@ -8618,8 +8618,6 @@ check_return_expr (tree retval, bool *no_warning)
|| TREE_CODE (retval) == PARM_DECL) || TREE_CODE (retval) == PARM_DECL)
&& DECL_CONTEXT (retval) == current_function_decl && DECL_CONTEXT (retval) == current_function_decl
&& !TREE_STATIC (retval) && !TREE_STATIC (retval)
&& same_type_p ((TYPE_MAIN_VARIANT (TREE_TYPE (retval))),
(TYPE_MAIN_VARIANT (functype)))
/* This is only interesting for class type. */ /* This is only interesting for class type. */
&& CLASS_TYPE_P (functype)) && CLASS_TYPE_P (functype))
flags = flags | LOOKUP_PREFER_RVALUE; flags = flags | LOOKUP_PREFER_RVALUE;
......
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> 2014-06-27 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* gfortran.dg/nint_2.f90: Don't XFAIL for powerpc64le-*-linux*. * gfortran.dg/nint_2.f90: Don't XFAIL for powerpc64le-*-linux*.
......
// 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment