From 85ca20c9516879edf92356ee5d8a5c567db085a0 Mon Sep 17 00:00:00 2001 From: Segher Boessenkool Date: Sat, 14 May 2016 01:01:40 +0200 Subject: [PATCH] combine: Don't call extract_left_shift with count < 0 (PR67483) If the compiled program does a shift by a negative amount, combine will happily work with that, but it shouldn't then do an undefined operation in GCC itself. This patch fixes the first case mentioned in the bug report (I haven't been able to reproduce the second case, on trunk at least). PR rtl-optimization/67483 * combine.c (make_compound_operation): Don't call extract_left_shift with negative shift amounts. From-SVN: r236232 --- gcc/ChangeLog | 6 ++++++ gcc/combine.c | 1 + 2 files changed, 7 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5133b37024b..7178c7c849a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-05-13 Segher Boessenkool + + PR rtl-optimization/67483 + * combine.c (make_compound_operation): Don't call extract_left_shift + with negative shift amounts. + 2016-05-13 Jakub Jelinek PR bootstrap/71071 diff --git a/gcc/combine.c b/gcc/combine.c index 3554f515582..cd864ccb0d4 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -8037,6 +8037,7 @@ make_compound_operation (rtx x, enum rtx_code in_code) && ! (GET_CODE (lhs) == SUBREG && (OBJECT_P (SUBREG_REG (lhs)))) && CONST_INT_P (rhs) + && INTVAL (rhs) >= 0 && INTVAL (rhs) < HOST_BITS_PER_WIDE_INT && INTVAL (rhs) < mode_width && (new_rtx = extract_left_shift (lhs, INTVAL (rhs))) != 0) -- 2.30.2