From: Paweł Sikora Date: Fri, 4 Nov 2005 14:33:30 +0000 (+0000) Subject: - outdated. X-Git-Tag: auto/th/gcc-4_1_0-0_20051113r106863_1~5 X-Git-Url: http://git.pld-linux.org/?a=commitdiff_plain;h=b368255e76a493cd6443e917985563c74b3b3095;p=packages%2Fgcc.git - outdated. Changed files: gcc-pr22429.patch -> 1.2 --- diff --git a/gcc-pr22429.patch b/gcc-pr22429.patch deleted file mode 100644 index beda5b8..0000000 --- a/gcc-pr22429.patch +++ /dev/null @@ -1,40 +0,0 @@ -The problem here is fold (build_range_check) converts -"-1073741824 <= n && n <= 1073741823" to "n + 1073741824 >= 0" -which makes depends on signed overflow being defined. Fold later converts -it to "n >= -1073741824" by my recent patch which is wrong. -This patch fixes the problem by using unsigned types if signed overflow -is undefined. - -OK? Bootstrapped and tested on x86_64-pc-linux-gnu with no regressions. - -Thanks, -Andrew Pinski - - * fold-const.c (build_range_check): Use unsigned when signed - overflow is undefined also. If etype is subtype, make sure that - the subtraction is in the supper type. - ---- a/gcc/fold-const.c 2005-10-19 08:15:39.000000000 +0000 -+++ b/gcc/fold-const.c 2005-10-19 08:29:46.574021728 +0000 -@@ -4005,7 +4005,8 @@ - } - - value = const_binop (MINUS_EXPR, high, low, 0); -- if (value != 0 && TREE_OVERFLOW (value) && ! TYPE_UNSIGNED (etype)) -+ if (value != 0 && (!flag_wrapv || TREE_OVERFLOW (value)) -+ && ! TYPE_UNSIGNED (etype)) - { - tree utype, minv, maxv; - -@@ -4016,6 +4017,11 @@ - case INTEGER_TYPE: - case ENUMERAL_TYPE: - case CHAR_TYPE: -+ /* There is no requirement that LOW be within the range of ETYPE -+ if the latter is a subtype. It must, however, be within the base -+ type of ETYPE. So be sure we do the subtraction in that type. */ -+ if (TREE_TYPE (etype)) -+ etype = TREE_TYPE (etype); - utype = lang_hooks.types.unsigned_type (etype); - maxv = fold_convert (utype, TYPE_MAX_VALUE (etype)); - maxv = range_binop (PLUS_EXPR, NULL_TREE, maxv, 1,