| /* { dg-do run { target ia32 } } */ |
| /* { dg-options "-O0 -mregparm=3" } */ |
| |
| typedef int ptrdiff_t; |
| extern void abort (void); |
| int |
| check_int (int *i, int align) |
| { |
| *i = 20; |
| if ((((ptrdiff_t) i) & (align - 1)) != 0) |
| abort (); |
| return *i; |
| } |
| void |
| check (void *p, int align) |
| { |
| if ((((ptrdiff_t) p) & (align - 1)) != 0) |
| abort (); |
| } |
| typedef int aligned __attribute__((aligned(64))); |
| void |
| foo (void) |
| { |
| aligned j; |
| void bar () |
| { |
| aligned i; |
| if (check_int (&i, __alignof__(i)) != i) |
| abort (); |
| if (check_int (&j, __alignof__(j)) != j) |
| abort (); |
| j = -20; |
| } |
| bar (); |
| if (j != -20) |
| abort (); |
| if (check_int (&j, __alignof__(j)) != j) |
| abort (); |
| } |
| int |
| main() |
| { |
| foo (); |
| return 0; |
| } |