http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53460
--- Comment #7 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-05-24
10:50:42 UTC ---
We have an unreachable block:
# BLOCK 4
# PRED:
<L0>:
operator delete (D.2260_4);
# SUCC: 5 [100.0%] (fallthru)
after profiling. Somehow we transform
void offsetToMiddleOfGlyph(const SimpleFontData*) (const struct SimpleFontData
* fontData)
{
void * D.2260;
# BLOCK 2 freq:10000
# PRED: ENTRY [100.0%] (fallthru,exec)
D.2260_4 = operator new (1);
GlyphMetricsMap<int>::GlyphMetricsMap (D.2260_4);
goto <bb 4>;
# SUCC: 4 [100.0%] (fallthru,exec) 3 (eh,exec)
# BLOCK 3
# PRED: 2 (eh,exec)
<L0>:
operator delete (D.2260_4);
resx 1
# SUCC:
to
void offsetToMiddleOfGlyph(const SimpleFontData*) (const struct SimpleFontData
* fontData)
{
void * __gcov_indirect_call_callee.8;
long int * __gcov_indirect_call_counters.7;
long int PROF_edge_counter.6;
void * D.2260;
# BLOCK 2 freq:10000
# PRED: ENTRY [100.0%] (fallthru,exec)
__gcov_indirect_call_counters.7_15 = __gcov_indirect_call_counters;
__gcov_indirect_call_callee.8_16 = __gcov_indirect_call_callee;
__gcov_indirect_call_profiler (__gcov_indirect_call_counters.7_15, 2,
offsetToMiddleOfGlyph, __gcov_indirect_call_callee.8_16);
__gcov_indirect_call_callee = 0B;
PROF_edge_counter.6_6 =
__gcov0._Z21offsetToMiddleOfGlyphPK14SimpleFontData[0];
PROF_edge_counter.6_8 = PROF_edge_counter.6_6 + 1;
__gcov0._Z21offsetToMiddleOfGlyphPK14SimpleFontData[0] =
PROF_edge_counter.6_8;
D.2260_4 = operator new (1);
# SUCC: 3 [100.0%] (fallthru)
# BLOCK 3 freq:10000
# PRED: 2 [100.0%] (fallthru)
PROF_edge_counter.6_9 =
__gcov0._Z21offsetToMiddleOfGlyphPK14SimpleFontData[1];
PROF_edge_counter.6_10 = PROF_edge_counter.6_9 + 1;
__gcov0._Z21offsetToMiddleOfGlyphPK14SimpleFontData[1] =
PROF_edge_counter.6_10;
GlyphMetricsMap<int>::GlyphMetricsMap (D.2260_4);
goto <bb 6>;
# SUCC: 6 [100.0%] (fallthru,exec)
# BLOCK 4
# PRED:
<L0>:
operator delete (D.2260_4);
# SUCC: 5 [100.0%] (fallthru)
branch_prob () splits the block this way, invalidating EH edges.