aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2014-07-04 10:38:45 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2014-07-04 10:38:45 +0200
commit253eab4f8b997af938ebb22a0ad73ac41de3f69b (patch)
tree490c05435b028566dbc257f7cbc48738ba99359a
parent14e000dec0e6eb1a7f3029cd147595e8972c2d23 (diff)
downloadgcc-253eab4f8b997af938ebb22a0ad73ac41de3f69b.zip
gcc-253eab4f8b997af938ebb22a0ad73ac41de3f69b.tar.gz
gcc-253eab4f8b997af938ebb22a0ad73ac41de3f69b.tar.bz2
re PR middle-end/61654 (ICE in release_function_body, at cgraph.c:1699)
PR middle-end/61654 * cgraphunit.c (expand_thunk): Call free_dominance_info. * g++.dg/opt/pr61654.C: New test. From-SVN: r212293
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/cgraphunit.c1
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/opt/pr61654.C27
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4965219..f37d8f4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
2014-07-04 Jakub Jelinek <jakub@redhat.com>
+ PR middle-end/61654
+ * cgraphunit.c (expand_thunk): Call free_dominance_info.
+
PR tree-optimization/61684
* tree-ssa-ifcombine.c (recognize_single_bit_test): Make sure
rhs1 of conversion is a SSA_NAME before using SSA_NAME_DEF_STMT on it.
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
index f7980ed..b2bafe4 100644
--- a/gcc/cgraphunit.c
+++ b/gcc/cgraphunit.c
@@ -1693,6 +1693,7 @@ expand_thunk (struct cgraph_node *node, bool output_asm_thunks, bool force_gimpl
#ifdef ENABLE_CHECKING
verify_flow_info ();
#endif
+ free_dominance_info (CDI_DOMINATORS);
/* Since we want to emit the thunk, we explicitly mark its name as
referenced. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5eee717..02e8b93 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2014-07-04 Jakub Jelinek <jakub@redhat.com>
+ PR middle-end/61654
+ * g++.dg/opt/pr61654.C: New test.
+
PR tree-optimization/61684
* gcc.c-torture/compile/pr61684.c: New test.
diff --git a/gcc/testsuite/g++.dg/opt/pr61654.C b/gcc/testsuite/g++.dg/opt/pr61654.C
new file mode 100644
index 0000000..78dc0c1
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/pr61654.C
@@ -0,0 +1,27 @@
+// PR middle-end/61654
+// { dg-do compile }
+
+class A
+{
+ virtual int a (int, int = 0) = 0;
+ int b (const int &);
+ int c;
+};
+
+class B : virtual A
+{
+ int d;
+ int a (int, int);
+};
+
+int
+A::b (const int &)
+{
+ return a ('\0');
+}
+
+int
+B::a (int, int)
+{
+ return 0 ? 0 : d;
+}