diff options
author | Richard Guenther <rguenther@suse.de> | 2012-05-24 12:46:53 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-05-24 12:46:53 +0000 |
commit | 49bdc0a65dfe8dbd6d13e776a79418932d7aebc0 (patch) | |
tree | 5ab5386d77aaf4e87b18f66605bbb346bbdd3d92 | |
parent | 8a791ae2310dcfa61f2dcf4cc3e8c4f0f4d2f91c (diff) | |
download | gcc-49bdc0a65dfe8dbd6d13e776a79418932d7aebc0.zip gcc-49bdc0a65dfe8dbd6d13e776a79418932d7aebc0.tar.gz gcc-49bdc0a65dfe8dbd6d13e776a79418932d7aebc0.tar.bz2 |
re PR middle-end/53460 (Internal compiler error: in calc_dfs_tree, at dominance.c:395)
2012-05-24 Richard Guenther <rguenther@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.
From-SVN: r187831
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tree-prof/pr53460.C | 25 | ||||
-rw-r--r-- | gcc/tree-profile.c | 3 |
4 files changed, 38 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5188cdb..4c6b9c0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2012-05-24 Richard Guenther <rguenther@suse.de> + PR middle-end/53460 + * tree-profile.c (tree_profiling): Cleanup the CFG if + execute_fixup_cfg requests it. + +2012-05-24 Richard Guenther <rguenther@suse.de> + * tree-flow.h (create_var_ann): Remove. * tree-dfa.c (create_var_ann): Remove and inline into its single caller ... diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 06fc8db..eeeb8e2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2012-05-24 Richard Guenther <rguenther@suse.de> + PR middle-end/53460 + * g++.dg/tree-prof/pr53460.C: New testcase. + +2012-05-24 Richard Guenther <rguenther@suse.de> + PR bootstrap/53466 * g++.dg/debug/pr53466.C: New testcase. diff --git a/gcc/testsuite/g++.dg/tree-prof/pr53460.C b/gcc/testsuite/g++.dg/tree-prof/pr53460.C new file mode 100644 index 0000000..ed05e0b --- /dev/null +++ b/gcc/testsuite/g++.dg/tree-prof/pr53460.C @@ -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() {} diff --git a/gcc/tree-profile.c b/gcc/tree-profile.c index 9461626..4136821 100644 --- a/gcc/tree-profile.c +++ b/gcc/tree-profile.c @@ -491,7 +491,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 |