diff options
author | Jan Hubicka <jh@suse.cz> | 2008-09-04 12:45:57 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2008-09-04 10:45:57 +0000 |
commit | d7f2fbf618e5109a30bbe4a6e03a8e2aad4215aa (patch) | |
tree | 903a28d7a99c5324861ffdddaa9bcefacc331363 /gcc | |
parent | 0af0e8dca5b8770a26214e5660dfcaeaf6bd36bf (diff) | |
download | gcc-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/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr37343.C | 19 | ||||
-rw-r--r-- | gcc/tree-switch-conversion.c | 2 |
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. */ |