From

  if (__p_91 != 0B)
    goto <bb 39>;
  else
    goto <bb 40>;
  # SUCC: 39 [100.0%]  count:931 (true,exec) 40 (false,exec)

  # BLOCK 39 freq:4175 count:931
  # PRED: 38 [100.0%]  count:931 (true,exec)
  operator delete (__p_91);
  # SUCC: 40 [100.0%]  count:931 (fallthru,exec)

  # BLOCK 40 freq:4188 count:934
  # PRED: 38 (false,exec) 39 [100.0%]  count:931 (fallthru,exec)
  <<<exception object>>> = save_eptr.427_34;
  <<<filter object>>> = save_filt.428_33;
  resx 3;
  # SUCC:

it generates

  if (__p_91 != 0B)
    goto <bb 39>;
  else
    goto <bb 40>;
  # SUCC: 39 [100.0%]  count:931 (true,exec) 40 (false,exec)

  # BLOCK 39 freq:4175 count:931
  # PRED: 38 [100.0%]  count:931 (true,exec)
  operator delete (__p_91);
  # SUCC: 48 [100.0%]  count:931 (fallthru,exec)

  # BLOCK 48 freq:4175 count:931
  # PRED: 39 [100.0%]  count:931 (fallthru,exec)
  <<<exception object>>> = save_eptr.427_34;
  <<<filter object>>> = save_filt.428_33;
  resx 3;
  # SUCC:

  # BLOCK 40 freq:13 count:3
  # PRED: 38 (false,exec)
  <<<exception object>>> = save_eptr.427_34;
  <<<filter object>>> = save_filt.428_33;
  resx 3;
  # SUCC:

duplicating the tail.  This causes us to ICE later like

Loop.cpp:75: internal compiler error: in expand_resx_expr, at except.c:573
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://bugs.opensuse.org/> for instructions.


-- 
           Summary: [4.3/4.4/4.5 Regression] tracer duplicates blocks w/o
                    adjusting EH tree
           Product: gcc
           Version: 4.5.0
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: rguenth at gcc dot gnu dot org


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

Reply via email to