------- Additional Comments From pinskia at gcc dot gnu dot org  2005-01-07 
19:30 -------
And another one (note on most targets a is passed by reference which is where 
the problem comes 
from):
extern "C" void abort( void );

struct A
{
    A() { d = d2 = 0; width = -1; }
    A( int _w ) : d( 0 ), d2( 0 ), width( _w ) {}

    A  b( const A &r ) const;
    int d;
    int d2;
    int width;
};

A A::b( const A &r ) const
{
    A tmp;
    tmp.width = width < r.width ? width : r.width;
    return tmp;
}
int main()
{
        A a( 10 );
        A b(100);
        a = b.b( a );
        if ( a.width != 10 )
               abort();
}

-- 
           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|[4.0 Regression] forgets to |[4.0 Regression] removing a
                   |deep-copy temporary return  |temporary return value when
                   |value                       |we cannot


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19317

Reply via email to