From 2d302f47a023715afb272eb119b72a36d3233388 Mon Sep 17 00:00:00 2001 From: Markus Trippelsdorf Date: Wed, 19 Nov 2014 16:28:23 +0000 Subject: [PATCH] rs6000: Fix signed integer overflows bootstrap-ubsan on gcc112 shows a couple of signed integer overflows: config/rs6000/constraints.md:143:33: runtime error: signed integer overflow: 9223372036854775807 + 32768 cannot be represented in type 'long int' config/rs6000/predicates.md:396:22: runtime error: signed integer overflow: 9223372036854775807 + 2147516416 cannot be represented in type 'long int' config/rs6000/predicates.md:856:11: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself config/rs6000/predicates.md:862:12: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself config/rs6000/predicates.md:865:11: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself config/rs6000/predicates.md:868:12: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself config/rs6000/predicates.md:914:11: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself config/rs6000/predicates.md:917:12: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself config/rs6000/predicates.md:940:11: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself config/rs6000/predicates.md:946:12: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself config/rs6000/predicates.md:949:11: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself config/rs6000/predicates.md:955:12: runtime error: negation of -9223372036854775808 cannot be represented in type 'long int'; cast to an unsigned type to negate this value to itself 2014-11-19 Markus Trippelsdorf * config/rs6000/constraints.md: Avoid signed integer overflows. * config/rs6000/predicates.md: Likewise. From-SVN: r217785 --- gcc/ChangeLog | 5 +++++ gcc/config/rs6000/constraints.md | 2 +- gcc/config/rs6000/predicates.md | 12 ++++++------ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e20f8cbe896..aeb8fadd946 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-11-19 Markus Trippelsdorf + + * config/rs6000/constraints.md: Avoid signed integer overflows. + * config/rs6000/predicates.md: Likewise. + 2014-11-19 Renlin Li PR middle-end/63762 diff --git a/gcc/config/rs6000/constraints.md b/gcc/config/rs6000/constraints.md index b8800e6c369..0e0e517d7a1 100644 --- a/gcc/config/rs6000/constraints.md +++ b/gcc/config/rs6000/constraints.md @@ -140,7 +140,7 @@ (define_constraint "I" "A signed 16-bit constant" (and (match_code "const_int") - (match_test "(unsigned HOST_WIDE_INT) (ival + 0x8000) < 0x10000"))) + (match_test "((unsigned HOST_WIDE_INT) ival + 0x8000) < 0x10000"))) (define_constraint "J" "high-order 16 bits nonzero" diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index de7fa4ebc76..1767cbd7a11 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -392,8 +392,8 @@ ;; Return 1 if op is a constant integer valid for addition with addis, addi. (define_predicate "add_cint_operand" (and (match_code "const_int") - (match_test "(unsigned HOST_WIDE_INT) - (INTVAL (op) + (mode == SImode ? 0x80000000 : 0x80008000)) + (match_test "((unsigned HOST_WIDE_INT) INTVAL (op) + + (mode == SImode ? 0x80000000 : 0x80008000)) < (unsigned HOST_WIDE_INT) 0x100000000ll"))) ;; Return 1 if op is a constant integer valid for addition @@ -827,7 +827,7 @@ (define_predicate "mask_operand" (match_code "const_int") { - HOST_WIDE_INT c, lsb; + unsigned HOST_WIDE_INT c, lsb; c = INTVAL (op); @@ -872,7 +872,7 @@ (define_predicate "mask_operand_wrap" (match_code "const_int") { - HOST_WIDE_INT c, lsb; + unsigned HOST_WIDE_INT c, lsb; c = INTVAL (op); @@ -897,7 +897,7 @@ (define_predicate "mask64_operand" (match_code "const_int") { - HOST_WIDE_INT c, lsb; + unsigned HOST_WIDE_INT c, lsb; c = INTVAL (op); @@ -923,7 +923,7 @@ (define_predicate "mask64_2_operand" (match_code "const_int") { - HOST_WIDE_INT c, lsb; + unsigned HOST_WIDE_INT c, lsb; c = INTVAL (op); -- 2.30.2