From 3c00684e55149e43d4daa3a702668803fa6c8e15 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Thu, 31 Oct 1996 20:10:33 -0700 Subject: [PATCH] fold-const.c (make_range, [...]): Correct normalization of an unsigned range that wraps around zero. * fold-const.c (make_range, case PLUS_EXPR): Correct normalization of an unsigned range that wraps around zero. From-SVN: r13089 --- gcc/fold-const.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 9e75466b007f..e66240326e9e 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -2814,10 +2814,16 @@ make_range (exp, pin_p, plow, phigh) || (n_high != 0 && TREE_OVERFLOW (n_high))) break; - /* Check for a range which has wrapped around the maximum value - thus making n_high < n_low. Normalize any such range it. */ + /* Check for an unsigned range which has wrapped around the maximum + value thus making n_high < n_low, and normalize it. */ if (n_low && n_high && tree_int_cst_lt (n_high, n_low)) - low = n_high, high = n_low, in_p = ! in_p; + { + low = range_binop (PLUS_EXPR, type, n_high, 0, + convert (type, integer_one_node), 0); + high = range_binop (MINUS_EXPR, type, n_low, 0, + convert (type, integer_one_node), 0); + in_p = ! in_p; + } else low = n_low, high = n_high;