diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ipa-split.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/inline17.C | 80 |
4 files changed, 92 insertions, 4 deletions
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 <pthaugen@us.ibm.com> +2011-02-11 Eric Botcazou <ebotcazou@adacore.com> + + PR tree-optimization/47420 + * ipa-split.c (visit_bb): Punt on any kind of GIMPLE_RESX. + +2011-02-11 Pat Haugen <pthaugen@us.ibm.com> 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 <ebotcazou@adacore.com> + + * g++.dg/opt/inline17.C: New test. + 2011-02-11 Tobias Burnus <burnus@net-b.de> 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 <silver24k@gmail.com> + +// { 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); +} |