[Bug c++/19317] [4.0 Regression] removing a temporary return value when we cannot
pinskia at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Mon Jan 10 05:03:00 GMT 2005
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-01-10 05:03 -------
Also we only remove the temporary variable if the size is "large" which seems wrong.
Here is another example and the reason why it works with the C front-end is because we don't do NRV
until late:
extern "C" void abort( void );
typedef struct A
{
int width;
int width1;
int width3;
int width5;
}A;
A bb( const A*this1, const A *r )
{
A tmp;
tmp.width = -1;
tmp.width += this1->width < r->width ? this1->width : r->width;
return tmp;
}
int main()
{
A a;
a.width = ( 10 );
A b;
b.width = (100);
a = bb( &b, &a );
if ( a.width != 9 )
abort();
}
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19317
More information about the Gcc-bugs
mailing list