This fixes PR53406, calling execute_fixup_cfg may need a subsequent cfg-cleanup run.
Profiledbootstrap and regtest running on x86_64-unknown-linux-gnu. Richard. 2012-05-24 Richard Guenther <rguent...@suse.de> PR middle-end/53460 * tree-profile.c (tree_profiling): Cleanup the CFG if execute_fixup_cfg requests it. * g++.dg/tree-prof/pr53460.C: New testcase. Index: gcc/tree-profile.c =================================================================== --- gcc/tree-profile.c (revision 187769) +++ gcc/tree-profile.c (working copy) @@ -497,7 +497,8 @@ tree_profiling (void) gcov_type_tmp_var = NULL_TREE; /* Local pure-const may imply need to fixup the cfg. */ - execute_fixup_cfg (); + if (execute_fixup_cfg () & TODO_cleanup_cfg) + cleanup_tree_cfg (); branch_prob (); if (! flag_branch_probabilities Index: gcc/testsuite/g++.dg/tree-prof/pr53460.C =================================================================== --- gcc/testsuite/g++.dg/tree-prof/pr53460.C (revision 0) +++ gcc/testsuite/g++.dg/tree-prof/pr53460.C (revision 0) @@ -0,0 +1,25 @@ +// { dg-options "-O" } + +template<typename T> class OwnPtr { +public: + ~OwnPtr(); +}; +template<class T> class GlyphMetricsMap { +public: + GlyphMetricsMap() { } + OwnPtr<int> m_pages; +}; +class SimpleFontData { +public: + void boundsForGlyph() const; +}; +inline __attribute__((__always_inline__)) +void SimpleFontData::boundsForGlyph() const +{ + new GlyphMetricsMap<int>; +} +void offsetToMiddleOfGlyph(const SimpleFontData* fontData) +{ + fontData->boundsForGlyph(); +} +int main() {}