aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2008-09-04 12:45:57 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2008-09-04 10:45:57 +0000
commitd7f2fbf618e5109a30bbe4a6e03a8e2aad4215aa (patch)
tree903a28d7a99c5324861ffdddaa9bcefacc331363 /gcc
parent0af0e8dca5b8770a26214e5660dfcaeaf6bd36bf (diff)
downloadgcc-d7f2fbf618e5109a30bbe4a6e03a8e2aad4215aa.zip
gcc-d7f2fbf618e5109a30bbe4a6e03a8e2aad4215aa.tar.gz
gcc-d7f2fbf618e5109a30bbe4a6e03a8e2aad4215aa.tar.bz2
re PR middle-end/37343 (ICE in expand_expr_real_1, at expr.c:7290)
PR middle-end/37343 * tree-switch-conversion.c (check_final_bb): Accept only IP invariants. * g++.dg/torture/pr37343.C New file. From-SVN: r139983
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/torture/pr37343.C19
-rw-r--r--gcc/tree-switch-conversion.c2
4 files changed, 32 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 02d59e0..7dd49a7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
2008-09-04 Jan Hubicka <jh@suse.cz>
+ PR middle-end/37343
+ * tree-switch-conversion.c (check_final_bb): Accept only IP
+ invariants.
+
+2008-09-04 Jan Hubicka <jh@suse.cz>
+
* tree-vrp.c (vrp_evaluate_conditional_warnv_with_ops_using_ranges):
Break out from ...
(vrp_evaluate_conditional_warnv_with_ops): ... this one. Add
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 226a77d..5e1b466 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-09-03 Jan Hubicka <jh@suse.cz>
+
+ PR middle-end/37343
+ * g++.dg/torture/pr37343.C New file.
+
2008-09-03 Ira Rosen <irar@il.ibm.com>
* gcc.dg/vect/slp-perm-1.c: Add call to check_vect.
@@ -11,7 +16,7 @@
PR tree-optimization/37345
PR tree-optimization/37358
PR tree-optimization/37357
- * g++.dg/torture/pr37345.c: New file.
+ * g++.dg/torture/pr37345.C: New file.
2008-09-03 Tobias Grosser <grosser@fim.uni-passau.de>
diff --git a/gcc/testsuite/g++.dg/torture/pr37343.C b/gcc/testsuite/g++.dg/torture/pr37343.C
new file mode 100644
index 0000000..c4614f3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr37343.C
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+typedef enum RW { rwBitmapGrey, rwBitmapGrey16 } RW;
+void FindDepth(RW);
+void ParseDumpBitmap(RW kind, int maxfiles)
+{
+ static const RW normalTypes[] = { };
+ const RW *bitmapTypes;
+ int i;
+ switch (kind) {
+ case rwBitmapGrey:
+ case rwBitmapGrey16:
+ bitmapTypes = &kind;
+ break;
+ default:
+ bitmapTypes = normalTypes;
+ }
+ for (i = 0; i < maxfiles; i++)
+ FindDepth(bitmapTypes[i]);
+}
diff --git a/gcc/tree-switch-conversion.c b/gcc/tree-switch-conversion.c
index 8bcfcfd..e975745 100644
--- a/gcc/tree-switch-conversion.c
+++ b/gcc/tree-switch-conversion.c
@@ -298,7 +298,7 @@ check_final_bb (void)
if ((bb == info.switch_bb
|| (single_pred_p (bb) && single_pred (bb) == info.switch_bb))
- && !is_gimple_min_invariant (gimple_phi_arg_def (phi, i)))
+ && !is_gimple_ip_invariant (gimple_phi_arg_def (phi, i)))
{
info.reason = " Non-invariant value from a case\n";
return false; /* Non-invariant argument. */