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