1 /* Test AAPCS layout (alignment).  */
2 
3 /* { dg-do run { target arm_eabi } } */
4 /* { dg-require-effective-target arm32 } */
5 /* { dg-options "-O3" } */
6 
7 #ifndef IN_FRAMEWORK
8 #define TESTFILE "align3.c"
9 
10 /* Struct will be aligned to 8.  */
11 struct s
12   {
13     int x;
14     /* 4 bytes padding here.  */
15     __attribute__((aligned (8))) int y;
16     /* 4 bytes padding here.  */
17   };
18 
19 typedef struct s __attribute__((aligned (4))) underaligned;
20 
21 #define EXPECTED_STRUCT_SIZE 16
22 extern void link_failure (void);
23 int
foo()24 foo ()
25 {
26   /* Optimization gets rid of this before linking.  */
27   if (sizeof (struct s) != EXPECTED_STRUCT_SIZE)
28     link_failure ();
29 }
30 
31 underaligned a = { 1, 4 };
32 underaligned b = { 9, 16 };
33 
34 #include "abitest.h"
35 #else
36   ARG (int, 3, R0)
37   /* Object alignment is 8, so split between 2 regs and 8 on stack.  */
38   ARG (underaligned, a, R2)
39   ARG (int, 6, STACK + 8)
40   /* Object alignment is 8, so skip over STACK + 12.  */
41   LAST_ARG (underaligned, b, STACK + 16)
42 #endif
43