aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2011-02-11 21:19:16 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2011-02-11 21:19:16 +0000
commit1da7d8c0d37ae794a9161cbb978218c0c6a4d086 (patch)
tree0be6d082a19931a25b706792a777759fc9d4fd6a
parenta26e8df4dcf99181598e35b599663c6f484dec72 (diff)
downloadgcc-1da7d8c0d37ae794a9161cbb978218c0c6a4d086.zip
gcc-1da7d8c0d37ae794a9161cbb978218c0c6a4d086.tar.gz
gcc-1da7d8c0d37ae794a9161cbb978218c0c6a4d086.tar.bz2
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
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/ipa-split.c5
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/opt/inline17.C80
4 files changed, 92 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 92f3ddb..25270c9 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 dce57ea..3b26f61 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 996c2d9..06a388e 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 0000000..a42233d
--- /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);
+}