From: Eric Botcazou Date: Fri, 11 Feb 2011 21:19:16 +0000 (+0000) Subject: re PR tree-optimization/47420 (ICE in calc_dfs_tree during RESX lowering) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1da7d8c0d37ae794a9161cbb978218c0c6a4d086;p=gcc.git re PR tree-optimization/47420 (ICE in calc_dfs_tree during RESX lowering) PR tree-optimization/47420 * ipa-split.c (visit_bb): Punt on any kind of GIMPLE_RESX. From-SVN: r170061 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 92f3ddb9dfd..25270c9a762 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,9 @@ -2011-02-11 Pat Haugen +2011-02-11 Eric Botcazou + + PR tree-optimization/47420 + * ipa-split.c (visit_bb): Punt on any kind of GIMPLE_RESX. + +2011-02-11 Pat Haugen PR rtl-optimization/47614 * rtl.h (check_for_inc_dec): Declare. diff --git a/gcc/ipa-split.c b/gcc/ipa-split.c index dce57eaeb63..3b26f61b1fb 100644 --- a/gcc/ipa-split.c +++ b/gcc/ipa-split.c @@ -643,11 +643,10 @@ visit_bb (basic_block bb, basic_block return_bb, into different partitions. This would require tracking of EH regions and checking in consider_split_point if they are not used elsewhere. */ - if (gimple_code (stmt) == GIMPLE_RESX - && stmt_can_throw_external (stmt)) + if (gimple_code (stmt) == GIMPLE_RESX) { if (dump_file && (dump_flags & TDF_DETAILS)) - fprintf (dump_file, "Cannot split: external resx.\n"); + fprintf (dump_file, "Cannot split: resx.\n"); can_split = false; } if (gimple_code (stmt) == GIMPLE_EH_DISPATCH) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 996c2d9ded3..06a388e01d0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-02-11 Eric Botcazou + + * g++.dg/opt/inline17.C: New test. + 2011-02-11 Tobias Burnus PR fortran/47550 diff --git a/gcc/testsuite/g++.dg/opt/inline17.C b/gcc/testsuite/g++.dg/opt/inline17.C new file mode 100644 index 00000000000..a42233d57b6 --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/inline17.C @@ -0,0 +1,80 @@ +// PR tree-optimization/47420 +// Testcase by Yu Simin + +// { dg-do compile } +// { dg-options "-O2" } + +class fooControlBase +{ +public: + fooControlBase() { } + + virtual ~fooControlBase(); +}; + +class fooControl : public fooControlBase +{ +public: + fooControl() { } +}; + +class sfTextEntryBase +{ +public: + sfTextEntryBase() { } + virtual ~sfTextEntryBase(); +}; + +class sfTextEntry : public sfTextEntryBase +{ +public: + sfTextEntry() + { + } +}; + +class sfTextAreaBase +{ +public: + sfTextAreaBase() { } + virtual ~sfTextAreaBase() { } + +protected: +}; + + +class sfTextCtrlBase : public fooControl, + public sfTextAreaBase, + public sfTextEntry +{ +public: + + + + sfTextCtrlBase() { } + virtual ~sfTextCtrlBase() { } +}; + +class sfTextCtrl : public sfTextCtrlBase +{ +public: + sfTextCtrl(void* parent) + { + Create(parent); + } + virtual ~sfTextCtrl(); + + bool Create(void *parent); + + +}; + +sfTextCtrl* CreateTextCtrl() +{ + return new sfTextCtrl(0); +} + +void foo () +{ + new sfTextCtrl(0); +}