https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104842

            Bug ID: 104842
           Summary: mips: signed overflow in LUI_OPERAND
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: xry111 at mengyan1223 dot wang
  Target Milestone: ---

Found this building GCC on mips64el-linux-gnuabi64 with bootstrap-ubsan
(testing a patch enabling ubsan for mips64*-linux-gnu*):

../../gcc/gcc/config/mips/predicates.md:382:11: runtime error: signed integer
overflow: 9223372036854775807 + 65536 cannot be represented in type 'long    
int'

That line uses LUI_INT (x), which expands to LUI_OPERAND (INTVAL (x)). 
LUI_OPERAND is defined as:

#define LUI_OPERAND(VALUE) \
  (((VALUE) | 0x7fff0000) == 0x7fff0000 \
   || ((VALUE) | 0x7fff0000) + 0x10000 == 0)

Obviously this will cause a signed overflow when INTVAL (x) is, for example,
the maximum value of HOST_WIDE_INT.

Reply via email to