1 /* { dg-options "-Wno-psabi" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */ 2 3 #include "compat-common.h" 4 #include "struct-align-1.h" 5 6 #define TEST(NAME) \ 7 extern char v1_##NAME; \ 8 extern double v2_##NAME; \ 9 extern int v3_##NAME; \ 10 \ 11 extern struct B1_##NAME b1_##NAME, ab1_##NAME[2]; \ 12 extern struct B2_##NAME b2_##NAME, ab2_##NAME[2]; \ 13 extern struct B3_##NAME b3_##NAME, ab3_##NAME[2]; \ 14 \ 15 extern void pass1_##NAME (struct B1_##NAME); \ 16 extern void pass2_##NAME (struct B2_##NAME); \ 17 extern void pass3_##NAME (struct B3_##NAME); \ 18 extern struct B1_##NAME return1_##NAME (void); \ 19 extern struct B2_##NAME return2_##NAME (void); \ 20 extern struct B3_##NAME return3_##NAME (void); \ 21 \ 22 void \ 23 checkp1_##NAME (struct B1_##NAME *p) \ 24 { \ 25 if (p->c != v1_##NAME) \ 26 DEBUG_CHECK; \ 27 if (p->d != v2_##NAME) \ 28 DEBUG_CHECK; \ 29 } \ 30 \ 31 void \ 32 checkp2_##NAME (struct B2_##NAME *p) \ 33 { \ 34 if (p->c != v1_##NAME) \ 35 DEBUG_CHECK; \ 36 if (p->a2.d != v2_##NAME) \ 37 DEBUG_CHECK; \ 38 } \ 39 \ 40 void \ 41 checkp3_##NAME (struct B3_##NAME *p) \ 42 { \ 43 if (p->c != v1_##NAME) \ 44 DEBUG_CHECK; \ 45 if (p->a3.d != v2_##NAME) \ 46 DEBUG_CHECK; \ 47 if (p->a3.i != v3_##NAME) \ 48 DEBUG_CHECK; \ 49 } \ 50 \ 51 void \ 52 test_##NAME (void) \ 53 { \ 54 struct B1_##NAME s1; \ 55 struct B2_##NAME s2; \ 56 struct B3_##NAME s3; \ 57 DEBUG_FPUTS (DESC_##NAME); \ 58 DEBUG_NL; \ 59 DEBUG_FPUTS (" global variable"); \ 60 checkp1_##NAME (&b1_##NAME); \ 61 checkp2_##NAME (&b2_##NAME); \ 62 checkp3_##NAME (&b3_##NAME); \ 63 DEBUG_NL; \ 64 DEBUG_FPUTS (" global array"); \ 65 checkp1_##NAME (&ab1_##NAME[1]); \ 66 checkp2_##NAME (&ab2_##NAME[1]); \ 67 checkp3_##NAME (&ab3_##NAME[1]); \ 68 DEBUG_NL; \ 69 DEBUG_FPUTS (" argument"); \ 70 pass1_##NAME (b1_##NAME); \ 71 pass2_##NAME (b2_##NAME); \ 72 pass3_##NAME (b3_##NAME); \ 73 DEBUG_NL; \ 74 DEBUG_FPUTS (" function result"); \ 75 s1 = return1_##NAME (); \ 76 checkp1_##NAME (&s1); \ 77 s2 = return2_##NAME (); \ 78 checkp2_##NAME (&s2); \ 79 s3 = return3_##NAME (); \ 80 checkp3_##NAME (&s3); \ 81 DEBUG_NL; \ 82 } 83 84 TEST (orig) 85 #ifndef SKIP_ATTRIBUTE 86 TEST (p_all) 87 TEST (p_inner) 88 TEST (p_outer) 89 TEST (a_max) 90 TEST (m_outer_p_inner) 91 TEST (m_inner_p_outer) 92 #endif 93