From 0cadbfaa89805ce4d1b93bed04c10d7c7bf1f6e2 Mon Sep 17 00:00:00 2001 From: Marc Glisse Date: Sat, 24 Aug 2013 00:16:08 +0200 Subject: re PR other/57324 (Undefined behavior issues found with clang's -fsanitize=undefined) 2013-08-24 Marc Glisse PR other/57324 * hwint.h (HOST_WIDE_INT_UC, HOST_WIDE_INT_1U, HOST_WIDE_INT_M1, HOST_WIDE_INT_M1U): New macros. * fold-const.c (sign_bit_p, build_range_check, fold_unary_loc, fold_binary_loc, fold_ternary_loc): Use the new macros. Use an unsigned -1 for lshift. * cse.c (cse_insn): Likewise. * double-int.c (rshift_double, lshift_double): Likewise. * builtins.c (fold_builtin_bitop): Likewise. * combine.c (force_to_mode): Likewise. * tree.c (integer_pow2p, tree_log2, tree_floor_log2): Likewise. * simplify-rtx.c (simplify_const_unary_operation, simplify_const_binary_operation): Likewise. * tree-stdarg.c (va_list_counter_bump, va_list_ptr_read, check_va_list_escapes): Likewise. * rtlanal.c (nonzero_bits1): Likewise. * expmed.c (expand_smod_pow2): Likewise. * tree-ssa-structalias.c (UNKNOWN_OFFSET): Use HOST_WIDE_INT_MIN. From-SVN: r201953 --- gcc/combine.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'gcc/combine.c') diff --git a/gcc/combine.c b/gcc/combine.c index 29dfd15..fc566c5 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -8129,8 +8129,8 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, /* If MODE is narrower than HOST_WIDE_INT and CVAL is a negative number, sign extend it. */ if (width > 0 && width < HOST_BITS_PER_WIDE_INT - && (cval & ((unsigned HOST_WIDE_INT) 1 << (width - 1))) != 0) - cval |= (unsigned HOST_WIDE_INT) -1 << width; + && (cval & (HOST_WIDE_INT_1U << (width - 1))) != 0) + cval |= HOST_WIDE_INT_M1U << width; y = simplify_gen_binary (AND, GET_MODE (x), XEXP (x, 0), GEN_INT (cval)); @@ -8158,8 +8158,8 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, number, sign extend it. */ if (width < HOST_BITS_PER_WIDE_INT - && (smask & ((unsigned HOST_WIDE_INT) 1 << (width - 1))) != 0) - smask |= (unsigned HOST_WIDE_INT) (-1) << width; + && (smask & (HOST_WIDE_INT_1U << (width - 1))) != 0) + smask |= HOST_WIDE_INT_M1U << width; if (CONST_INT_P (XEXP (x, 1)) && exact_log2 (- smask) >= 0 -- cgit v1.1