For return by value optimization, instead of calling the copy constructor or
the assignment operator, gcc decides to optimize and push the address of the
lhs of the expression into the rhs.

Foo createFoo() { Foo f2; return f2; }
int main(){
  Foo f1 = createFoo();
  return 0;
}

OPTIMIZED TO
void createFoo( Foo& f2 ) {...} 
int main() {
  Foo f1;
  createFoo(f1);
  return 0;
}

This is a problem when you want to explicitly define the copy constructor or
assignment operator to do something other than deep copying.


-- 
           Summary: invalid return by value optimization
           Product: gcc
           Version: 3.4.6
            Status: UNCONFIRMED
          Severity: blocker
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: khoaduynguyen at gmail dot com


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

Reply via email to