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:
parent
c02e185174
commit
fb682f9458
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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*.
|
||||
|
18
gcc/testsuite/g++.dg/cpp0x/elision_conv.C
Normal file
18
gcc/testsuite/g++.dg/cpp0x/elision_conv.C
Normal 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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user