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

            Bug ID: 89208
           Summary: unaligned access expanded to memcpy
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: bernd.edlinger at hotmail dot de
  Target Milestone: ---

This test case is mis-compiled:

$ cat unaligned-argument-3.c
/* { dg-do compile } */
/* { dg-options "-ffreestanding -marm -march=armv6 -mno-unaligned-access
-mfloat-abi=soft -mabi=aapcs -O3" } */

struct s {
  int a, b;
} __attribute__((packed));

void f(struct s *a, struct s *b)
{
  *a = *b;
}

/* { dg-final { scan-assembler-times "ldrd" 0 } } */
/* { dg-final { scan-assembler-times "strd" 0 } } */
/* { dg-final { scan-assembler-times "ldm" 0 } } */
/* { dg-final { scan-assembler-times "stm" 0 } } */
/* { dg-final { scan-assembler-times "memcpy" 0 } } */

$ arm-linux-gnueabihf-gcc -ffreestanding -marm -march=armv6
-mno-unaligned-access -mfloat-abi=soft -mabi=aapcs -O3 -S
unaligned-argument-3.c
$ $ cat unaligned-argument-3.s
        .arch armv6
        .eabi_attribute 20, 1
        .eabi_attribute 21, 1
        .eabi_attribute 23, 3
        .eabi_attribute 24, 1
        .eabi_attribute 25, 1
        .eabi_attribute 26, 1
        .eabi_attribute 30, 2
        .eabi_attribute 34, 0
        .eabi_attribute 18, 4
        .file   "unaligned-argument-3.c"
        .text
        .align  2
        .global f
        .syntax unified
        .arm
        .fpu softvfp
        .type   f, %function
f:
        @ args = 0, pretend = 0, frame = 0
        @ frame_needed = 0, uses_anonymous_args = 0
        mov     r2, #8
        push    {r4, lr}
        bl      memcpy
        pop     {r4, pc}
        .size   f, .-f
        .ident  "GCC: (GNU) 9.0.1 20190128 (experimental)"
        .section        .note.GNU-stack,"",%progbits


it is wrong to call memcpy if -ffreestanding is used.

Reply via email to