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

            Bug ID: 108910
           Summary: [13 Regression] Further ICE in aarch64_layout_arg
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
  Target Milestone: ---

extern void foo (float, float *, float *);

void
bar (void *p)
{
  float *__attribute__((aligned (64))) q = __builtin_assume_aligned (p, 64);
  foo (0.0f, q, q);
}

ICEs on aarch64-linux with -O2 likely since r13-5124 with:
during RTL pass: expand
woohoo.c: In function ‘bar’:
woohoo.c:7:3: internal compiler error: in aarch64_layout_arg, at
config/aarch64/aarch64.cc:7688
    7 |   foo (0.0f, q, q);
      |   ^~~~~~~~~~~~~~~~
0x12c4993 aarch64_layout_arg
        ../../gcc/config/aarch64/aarch64.cc:7688
0x12c527a aarch64_function_arg
        ../../gcc/config/aarch64/aarch64.cc:7868
0xa44efb initialize_argument_information
        ../../gcc/calls.cc:1499

I know trying to overalign a pointer type (rather than what it points to) is
very dumb,
but some real-world code (most likely just by mistake (but many)) does that:
https://github.com/darktable-org/darktable/blob/master/src/common/bspline.h#L178

Reply via email to