summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-10-10 14:53:27 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-10-10 14:53:27 +0000
commit740bb6ad8f28b53201c9d0a3d0849068c5d414e4 (patch)
treef61162308417f730044161c62446557cddff40bf /gcc
parentfdfea49e45f7aee01a4fa17075803a57e02b9aac (diff)
downloadgcc-740bb6ad8f28b53201c9d0a3d0849068c5d414e4.tar.gz
re PR tree-optimization/41654 (ICE: in gimple_cond_get_ops_from_tree, at gimple.c:417)
2009-10-10 Richard Guenther <rguenther@suse.de> PR tree-optimization/41654 * tree-ssa-ifcombine.c (ifcombine_ifandif): Properly canonicalize a cond expr before calling gimple_cond_set_condition_from_tree. (ifcombine_iforif): Likewise. * gfortran.fortran-torture/compile/pr41654.f90: New testcase. From-SVN: r152620
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/compile/pr41654.f9015
-rw-r--r--gcc/tree-ssa-ifcombine.c6
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index dd177c4ad0d..947dd1f75c3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2009-10-10 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/41654
+ * tree-ssa-ifcombine.c (ifcombine_ifandif): Properly canonicalize
+ a cond expr before calling gimple_cond_set_condition_from_tree.
+ (ifcombine_iforif): Likewise.
+
2009-10-09 Ian Lance Taylor <iant@google.com>
* configure.ac: Use AC_SEARCH_LIBS to find dlopen.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 534d797e04d..7bf174abf94 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-10 Richard Guenther <rguenther@suse.de>
+
+ PR tree-optimization/41654
+ * gfortran.fortran-torture/compile/pr41654.f90: New testcase.
+
2009-10-09 Jason Merrill <jason@redhat.com>
* g++.dg/cpp/ucn-1.C: New.
diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr41654.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr41654.f90
new file mode 100644
index 00000000000..aa61905deaf
--- /dev/null
+++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr41654.f90
@@ -0,0 +1,15 @@
+SUBROUTINE SCANBUFR (LBUFRIGNOREERROR, LBOPRPRO, LLSPLIT)
+LOGICAL :: LBUFRIGNOREERROR, LBOPRPRO, LLSPLIT
+INTEGER :: IBOTYP, IBSTYP
+IF ((IBOTYP.eq.0).AND.(IBSTYP.eq.1)) GO TO 251
+IF ((IBOTYP.eq.0).AND.(IBSTYP.eq.3)) GO TO 251
+IF(LBUFRIGNOREERROR) THEN
+ goto 360
+ENDIF
+251 CONTINUE
+IF(LBOPRPRO.AND.LLSPLIT) THEN
+ CALL OBSCREEN
+ENDIF
+360 CONTINUE
+END SUBROUTINE SCANBUFR
+
diff --git a/gcc/tree-ssa-ifcombine.c b/gcc/tree-ssa-ifcombine.c
index 1d2d85b7a8f..335b4fd95fc 100644
--- a/gcc/tree-ssa-ifcombine.c
+++ b/gcc/tree-ssa-ifcombine.c
@@ -340,6 +340,9 @@ ifcombine_ifandif (basic_block inner_cond_bb, basic_block outer_cond_bb)
t2 = force_gimple_operand_gsi (&gsi, t2, true, NULL_TREE,
true, GSI_SAME_STMT);
t = fold_build2 (EQ_EXPR, boolean_type_node, t2, t);
+ t = canonicalize_cond_expr_cond (t);
+ if (!t)
+ return false;
gimple_cond_set_condition_from_tree (inner_cond, t);
update_stmt (inner_cond);
@@ -488,6 +491,9 @@ ifcombine_iforif (basic_block inner_cond_bb, basic_block outer_cond_bb)
true, GSI_SAME_STMT);
t = fold_build2 (NE_EXPR, boolean_type_node, t,
build_int_cst (TREE_TYPE (t), 0));
+ t = canonicalize_cond_expr_cond (t);
+ if (!t)
+ return false;
gimple_cond_set_condition_from_tree (inner_cond, t);
update_stmt (inner_cond);