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

            Bug ID: 98681
           Summary: aarch64: Invalid ubfiz instruction rejected by
                    assembler
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: acoplan at gcc dot gnu.org
  Target Milestone: ---

AArch64 GCC generates an invalid ubfiz instruction for the following testcase:

extern unsigned char a[];
int b;
void c() {
  for (int d; d < 120; d += 6)
    a[d] = b << -64;
}

$ aarch64-elf-gcc -c test.c -O3
test.c: In function 'c':
test.c:5:14: warning: left shift count is negative [-Wshift-count-negative]
    5 |     a[d] = b << -64;
      |              ^~
/tmp/ccelsQle.s: Assembler messages:
/tmp/ccelsQle.s:14: Error: immediate value out of range 0 to 31 at operand 3 --
`ubfiz w1,w1,-64,8'

Although this testcase invokes UB, it was reduced from a testcase which
ostensibly does not. In any case, we should not generate invalid assembly here.

Reply via email to