| /* { dg-do run { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ |
| |
| #include "check.h" |
| |
| #ifndef ALIGNMENT |
| #define ALIGNMENT 64 |
| #endif |
| |
| typedef int aligned __attribute__((aligned(ALIGNMENT))); |
| |
| int test_nested (int i) |
| { |
| aligned y; |
| |
| int __attribute__ ((__noinline__, __regparm__(2))) foo (int j, int k, int l) |
| { |
| aligned x; |
| |
| if (check_int (&x, __alignof__(x)) != x) |
| abort (); |
| |
| if (x != 20) |
| abort (); |
| |
| return i + j + k + l; |
| } |
| |
| if (check_int (&y, __alignof__(y)) != y) |
| abort (); |
| |
| if (y != 20) |
| abort (); |
| |
| return foo(i, i+1, i+2) * i; |
| } |
| |
| int __attribute__ ((__noinline__, __regparm__(3), __force_align_arg_pointer__)) |
| test_realigned (int j, int k, int l) |
| { |
| aligned y; |
| |
| if (check_int (&y, __alignof__(y)) != y) |
| abort (); |
| |
| if (y != 20) |
| abort (); |
| |
| return j + k + l; |
| } |
| |
| int main () |
| { |
| if (test_nested(10) != 430) |
| abort (); |
| |
| if (test_realigned(10, 11, 12) != 33) |
| abort (); |
| |
| return 0; |
| } |