1 /* { dg-do run { target ia32 } } */
2 /* { dg-options "-O0 -mregparm=3" } */
3 
4 typedef int ptrdiff_t;
5 extern void abort (void);
6 int
check_int(int * i,int align)7 check_int (int *i, int align)
8 {
9   *i = 20;
10   if ((((ptrdiff_t) i) & (align - 1)) != 0)
11     abort ();
12   return *i;
13 }
14 void
check(void * p,int align)15 check (void *p, int align)
16 {
17   if ((((ptrdiff_t) p) & (align - 1)) != 0)
18     abort ();
19 }
20 typedef int aligned __attribute__((aligned(64)));
21 void
foo(void)22 foo (void)
23 {
24   aligned j;
25   void bar ()
26     {
27       aligned i;
28       if (check_int (&i, __alignof__(i)) != i)
29 	abort ();
30       if (check_int (&j, __alignof__(j)) != j)
31 	abort ();
32       j = -20;
33     }
34   bar ();
35   if (j != -20)
36     abort ();
37   if (check_int (&j, __alignof__(j)) != j)
38     abort ();
39 }
40 int
main()41 main()
42 {
43   foo ();
44   return 0;
45 }
46