/* { dg-do compile } */ /* { dg-options "-Os -mno-unaligned-access" } */ /* { dg-final { scan-assembler "ldrb" } } */ /* { dg-final { scan-assembler "strb" } } */ struct s { char u; long long v[2]; } __attribute__((packed,aligned(1))); __attribute__((noinline, noclone)) long long foo(struct s *x, int y, long long z) { long long a = x->v[y]; x->v[y] = z; return a; } struct s a = {0,{0,0}}; int main() { if (foo(&a,0,1) != 0) __builtin_abort(); if (foo(&a,0,2) != 1) __builtin_abort(); if (foo(&a,1,1) != 0) __builtin_abort(); return 0; }