This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Why does not RVO work in this case?


Hello,

Below is my trivial test case that I think should exhibit return value
optimization. However, when I run it I get the following result:
Address of a in main    0x7fff676bb130
Address of a in func    0x7fff676ba190
5

I compiled with:
g++ -std=gnu++0x -Wall -Wextra -pedantic -O2 test1.cc

My compiler is:
> g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.

I guess the return values are not optimized away. How should I enable RVO?

BR,
Henrik



#include <iostream>
#include <array>

class MT {
public:
  MT(int a = 0) {
    data[0] = a;
  }

  int val() {
    return data[0];
  }

private:
  std::array<int, 1000> data;
};

MT func() {
  MT a(5);
  std::cout << "Address of a in func\t" << &a << std::endl;
  return a;
}

int main() {
  MT a;
  std::cout << "Address of a in main\t" << &a << std::endl;
  a = func();
  std::cout << a.val() << std::endl;
  return 0;
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]