1 /* Test AAPCS layout (alignment) for callee. */
2
3 /* { dg-do run { target aarch64*-*-* } } */
4
5 extern int memcmp (const void *s1, const void *s2, __SIZE_TYPE__ n);
6 extern void abort (void);
7
8 /* The alignment also gives this size 32, so will be passed by reference. */
9 typedef struct __attribute__ ((__aligned__ (32)))
10 {
11 long x;
12 long y;
13 } overaligned;
14
15 overaligned a = { 2, 3 };
16
17 void
test_pass_by_ref(int x0,overaligned x1,int x2)18 test_pass_by_ref (int x0, overaligned x1, int x2)
19 {
20 if (x0 != 7 || x2 != 9)
21 abort ();
22 if (memcmp ((void *) &x1, (void *)&a, sizeof (overaligned)))
23 abort ();
24 long addr = ((long) &x1) & 31;
25 if (addr != 0)
26 {
27 __builtin_printf ("Alignment was %d\n", addr);
28 abort ();
29 }
30 }
31
32 int
main(int argc,char ** argv)33 main (int argc, char **argv)
34 {
35 test_pass_by_ref (7, a, 9);
36 return 0;
37 }
38