/* { 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; }