------- Comment #14 from rakdver at gcc dot gnu dot org 2006-05-17 13:40
-------
(In reply to comment #12)
> Ok, the patch fixes this PR, but not PR26719.
>
> Index: tree-chrec.c
> ===================================================================
> --- tree-chrec.c (revision 113852)
> +++ tree-chrec.c (working copy)
> @@ -1150,7 +1150,7 @@ chrec_convert (tree type, tree chrec, tr
> 1, 2, ..., 127, -128, ... The result should not be
> {(schar)1, +, (schar)1}_x, but instead, we should keep the
> conversion: (schar) {(uchar)1, +, (uchar)1}_x. */
> - if (scev_probably_wraps_p (type, base, step, at_stmt, loop,
> + if (scev_probably_wraps_p (ct, base, step, at_stmt, loop,
> &dummy, &dummy))
> goto failed_to_convert;
>
>
although I think the idea of the fix is OK, you must be more careful --
scev_probably_wraps_p does computations with base and step in type,
so you cannot just pass another type to it.
The problem with fold_convert is that currently it is a patch over patch; it
checks for overflows twice (once using scev_probably_wraps_p and once again
in convert_step_widening), but neither of the checks is exactly what is needed.
I recall having this fixed once (perhaps on killloop branch), I will check
whether I can find the patch.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27639