------- Comment #4 from rguenth at gcc dot gnu dot org  2009-10-11 12:05 -------
ehcleanup does not deal with the virtual PHI node appearing in BB13:

  # BLOCK 11 freq:4067
  # PRED: 10 [100.0%]  (fallthru,exec)
  D.2166_92 = (int *) D.2165_108;
  # .MEM_148 = VDEF <.MEM_106>
  D.2148_59 = A::foo (&a, D.2166_92);
  # SUCC: 12 [100.0%]  (fallthru,exec) 13 (eh,exec)

...

  # BLOCK 13
  # PRED: 11 (eh,exec)
  # .MEM_44 = PHI <.MEM_148(11)>
<L13>:
  goto <bb 27> (<L5>);
  # SUCC: 27 [100.0%]  (fallthru,exec)

...

  # BLOCK 27
  # PRED: 13 [100.0%]  (fallthru,exec) 26 [100.0%]  (fallthru,exec)
  # .MEM_138 = PHI <.MEM_44(13), .MEM_60(26)>
<L5>:
  # .MEM_19 = VDEF <.MEM_138>
  operator delete (D.1857_5);
  resx 3
  # SUCC:

as the comment suggests this should be easy to fix.  Honza?

#1  0x0880ed28 in unsplit_eh (lp=0xb7d6c0c0)
    at /home/richard/src/trunk/gcc/tree-eh.c:3389
3389      gcc_assert (gimple_seq_empty_p (phi_nodes (bb)));
(gdb) l
3384      /* ??? I can't imagine there would be PHI nodes, since by nature
3385         of critical edge splitting this block should never have been
3386         a dominance frontier.  If cfg cleanups somehow confuse this,
3387         due to single edges in and out we ought to have degenerate PHIs
3388         and can easily propagate the PHI arguments.  */
3389      gcc_assert (gimple_seq_empty_p (phi_nodes (bb)));


-- 

rguenth at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hubicka at gcc dot gnu dot
                   |                            |org


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

Reply via email to