I noticed that gcc 4.7 implements the c++0x "final keyword" and jumped to 
test it.
I'm hoping that eventually the keyword will be used to trigger 
"devirtualization optimization"

for instance in this example I expect "geta" and "getb" to be compiled in th 
every same object code
struct A {
  virtual ~A(){}
  virtual int a() const final { return m_a;}
  int b() const { return m_a;}
  int geta() const;
  int getb() const;

  int m_a;
};
int A::geta() const { return a();}
int A::getb() const { return b();}

Is such an optimization foreseen?

at the moment this seems not to be the case 
 g++ -O2 -std=c++0x -c final.cpp 
pb-d-128-141-131-124:ctest innocent$ otool -t -V -X final.o
__ZNK1A4getaEv:
        movq    (%rdi),%rax
        movq    __ZNK1A4getbEv(%rax),%rax
        jmp     *%rax
        nop
        nopw    __ZNK1A4getaEv(%rax,%rax)
__ZNK1A4getbEv:
        movl    0x08(%rdi),%eax
        ret

(removing "final"  generates the very same object code)


  thanks,
          Vincenzo

Reply via email to