PR26467 UBSAN: cgen.c:762 shift exponent 18446744073709551615
authorAlan Modra <amodra@gmail.com>
Thu, 27 Aug 2020 04:16:45 +0000 (13:46 +0930)
committerAlan Modra <amodra@gmail.com>
Thu, 27 Aug 2020 12:26:33 +0000 (21:56 +0930)
PR 26467
* cgen.c (weak_operand_overflow_check): Handle opmask for
operand length zero.  Use 1UL constant.

gas/ChangeLog
gas/cgen.c

index c0d9b26a29c31c54073e54949658927b1520fcaa..92dd9784d2a7200bd5a04f080ca626705efe7b57 100644 (file)
@@ -1,3 +1,9 @@
+2020-08-27  Alan Modra  <amodra@gmail.com>
+
+       PR 26467
+       * cgen.c (weak_operand_overflow_check): Handle opmask for
+       operand length zero.  Use 1UL constant.
+
 2020-08-26  Alan Modra  <amodra@gmail.com>
 
        PR 26508
index 0bc44f6c08c2881602772c7904170a6035ef9f73..7c924d117be7c561593b5f956bac730350c29cbb 100644 (file)
@@ -759,7 +759,7 @@ weak_operand_overflow_check (const expressionS *  exp,
 {
   const unsigned long len = operand->length;
   unsigned long mask;
-  unsigned long opmask = (((1L << (len - 1)) - 1) << 1) | 1;
+  unsigned long opmask = len == 0 ? 0 : (1UL << (len - 1) << 1) - 1;
 
   if (!exp)
     return NULL;