aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAaron Sawdey <acsawdey@linux.ibm.com>2020-03-13 18:14:22 -0500
committerAaron Sawdey <acsawdey@linux.ibm.com>2020-03-13 18:16:41 -0500
commit50c96067c8ed60f4b3fcbee89fe31c905241b356 (patch)
tree49e99840b988905fa8d4ee2dd17e808db028139c /gcc
parent5c048755ec98645f8436b630df3f9294ca9cbc2a (diff)
downloadgcc-50c96067c8ed60f4b3fcbee89fe31c905241b356.zip
gcc-50c96067c8ed60f4b3fcbee89fe31c905241b356.tar.gz
gcc-50c96067c8ed60f4b3fcbee89fe31c905241b356.tar.bz2
Fix UBSAN error, shifting 64 bit value by 64.
2020-03-13 Aaron Sawdey <acsawdey@linux.ibm.com> PR target/92379 * config/rs6000/rs6000.c (num_insns_constant_multi) Don't shift a 64-bit value by 64 bits (UB).
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c5
2 files changed, 10 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4ea81e6..2daa351 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2020-03-13 Aaron Sawdey <acsawdey@linux.ibm.com>
+
+ PR target/92379
+ * config/rs6000/rs6000.c (num_insns_constant_multi) Don't shift a
+ 64-bit value by 64 bits (UB).
+
2020-03-13 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/92303
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 24598af..5798f92 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -5612,7 +5612,10 @@ num_insns_constant_multi (HOST_WIDE_INT value, machine_mode mode)
&& rs6000_is_valid_and_mask (GEN_INT (low), DImode))
insns = 2;
total += insns;
- value >>= BITS_PER_WORD;
+ /* If BITS_PER_WORD is the number of bits in HOST_WIDE_INT, doing
+ it all at once would be UB. */
+ value >>= (BITS_PER_WORD - 1);
+ value >>= 1;
}
return total;
}