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