------- 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

Reply via email to