[Bug c++/57176] New: copy elision with function arguments passed by value

glisse at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Sun May 5 14:03:00 GMT 2013


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

             Bug #: 57176
           Summary: copy elision with function arguments passed by value
    Classification: Unclassified
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Keywords: missed-optimization
          Severity: enhancement
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: glisse@gcc.gnu.org


Hello,

it is a well know issue that copy elision is allowed but never implemented in
cases like:

A f(A x){
  return x;
}

and the reason is that the caller and the callee have to communicate for it to
happen. In C, the function would be:
void f_impl(A* ret_p, A* x_p);
with the caller being responsible for allocating space for ret and x and making
the copy into x.

It seems that to make it work, we would need to notice that f is eligible for
this optimization, mark it somehow (indicating which argument can be used as
return value) and clone it:
void f_impl_nrvo(A* ret_x_p);

Callers who would see this mark would instead call the clone with one less
argument.

There are clearly many parts of the front-end I don't understand enough to do
this, but does it look like a correct and workable approach?



More information about the Gcc-bugs mailing list