[Bug c++/29378] New: The copy constructor is not being called upon return from function calls.

SSacek at appsecinc dot com gcc-bugzilla@gcc.gnu.org
Sat Oct 7 08:10:00 GMT 2006


Functions returning objects do not call the copy constructors for permanent
objects. The program below works for the Solaris and Microsoft compilers, but
not for the GCC compiler.  

IÂ’m using:
-bash-3.00$ gcc -v
Reading specs from /usr/lib/gcc/i386-redhat-linux/3.4.6/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-java-awt=gtk --host=i386-redhat-linux
Thread model: posix gcc version 3.4.6 20060404 (Red Hat 3.4.6-3)

#include "stdio.h"

struct S
{
      S()            {  printf( "Inside default constructor \n" );  }
      S( const S & ) {  printf( "Inside copy constructor \n" );  } 
};

S  f( void )
{
      S s1;
      return s1;
}

int main ( int, char ** )
{
      S  s1;
      S  s2( s1 );  // must call the copy constructor
      S  s3 = f();  // must call the copy constructor
      S  s4( f() ); // must call the copy constructor
      return 0;
}

#if 0
      //  GCC output is:
      Inside default constructor 
      Inside copy constructor 
      Inside default constructor 
      Inside default constructor 

      //  Both Solaris and Microsoft output is:
      Inside default constructor 
      Inside copy constructor 
      Inside default constructor 
      Inside copy constructor 
      Inside default constructor 
      Inside copy constructor
#endif


-- 
           Summary: The copy constructor is not being called upon return
                    from function calls.
           Product: gcc
           Version: 3.4.6
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: SSacek at appsecinc dot com
 GCC build triplet: gcc version 3.4.6
  GCC host triplet: Red Hat 3.4.6-3


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



More information about the Gcc-bugs mailing list