------- Comment #2 from rguenth at gcc dot gnu dot org 2010-08-26 09:42 ------- Confirmed.
The tracer seriously messes up virtual operands. I'm not sure the copy tables work like the author thought they would. After duplicating we have virtual int S::vm() (struct S * const this) { int state; int D.2129; int retval.0; <bb 2>: # .MEM_8 = VDEF <.MEM_7(D)> retval.0_1 = foo (&state); switch (retval.0_1) <default: <L3>, case 0: <L0>, case 1: <L1>> <L0>: # .MEM_9 = VDEF <.MEM_8> bar (); <bb 7>: # .MEM_14 = PHI <.MEM_9(3)> if (this_3(D) != 0B) goto <bb 8>; else goto <bb 6> (<L3>); <bb 8>: # .MEM_15 = VDEF <.MEM_5> S::~S (this_3(D)); # .MEM_16 = VDEF <.MEM_12> operator delete (this_3(D)); <bb 9>: # .MEM_17 = PHI <.MEM_13(8)> # VUSE <.MEM_10> D.2129_18 = state; return D.2129_4; # .MEM_5 = PHI <.MEM_8(2)> <L1>: if (this_3(D) != 0B) goto <bb 5>; else goto <bb 6> (<L3>); <bb 5>: # .MEM_12 = VDEF <.MEM_5> S::~S (this_3(D)); # .MEM_13 = VDEF <.MEM_12> operator delete (this_3(D)); # .MEM_10 = PHI <.MEM_8(2), .MEM_5(4), .MEM_13(5), .MEM_5(7)> <L3>: # VUSE <.MEM_10> D.2129_4 = state; return D.2129_4; } see how virtual SSA form is messed up (and no symbol is marked for renaming). -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2010-08-26 09:42:55 date| | Target Milestone|--- |4.6.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45412