1#include "compat-common.h"
2
3#ifdef SKIP_VA
4const int test_va = 0;
5#else
6const int test_va = 1;
7#endif
8
9typedef void (*fpi)(int);
10typedef void (*fpd)(double);
11
12extern void test1a (fpi);
13extern void test1b (fpi, int);
14extern void test1c (double, fpd);
15extern void test2a (fpi, fpd);
16extern void test2b (fpi, fpd, int);
17extern void test2c (fpi, int, fpd);
18extern void test2d (int, fpi, fpd);
19extern void test2e (fpi, fpd, int, double);
20extern void test2f (fpi, int, fpd, double);
21extern void test2g (fpi, int, double, fpd);
22extern void test2h (double, fpd, fpi, int);
23extern void test2i (double, fpd, int, fpi);
24extern void test2j (int, double, fpi, fpd);
25extern void testva (int, ...);
26
27int f1_val;
28double f2_val;
29
30void f1 (int i) { f1_val = i; }
31void f2 (double x) { f2_val = x; }
32
33void
34checki (int x, int v)
35{
36  if (x != v)
37    DEBUG_CHECK
38}
39
40void
41checkd (double x, double v)
42{
43  if (x != v)
44    DEBUG_CHECK
45}
46
47void
48testit (void)
49{
50  DEBUG_FPUTS ("test1a: ");
51  test1a (f1);
52  checki (f1_val, 1);
53  DEBUG_NL;
54  DEBUG_FPUTS ("test1b: ");
55  test1b (f1, 2);
56  checki (f1_val, 2);
57  DEBUG_NL;
58  DEBUG_FPUTS ("test1c: ");
59  test1c (3.0, f2);
60  checkd (f2_val, 3.0);
61  DEBUG_NL;
62  DEBUG_FPUTS ("test2a: ");
63  test2a (f1, f2);
64  checki (f1_val, 10);
65  checkd (f2_val, 10.0);
66  DEBUG_NL;
67  DEBUG_FPUTS ("test2b: ");
68  test2b (f1, f2, 11);
69  checki (f1_val, 11);
70  checkd (f2_val, 11.0);
71  DEBUG_NL;
72  DEBUG_FPUTS ("test2c: ");
73  test2c (f1, 12, f2);
74  checki (f1_val, 12);
75  checkd (f2_val, 12.0);
76  DEBUG_NL;
77  DEBUG_FPUTS ("test2d: ");
78  test2d (13, f1, f2);
79  checki (f1_val, 13);
80  checkd (f2_val, 13.0);
81  DEBUG_NL;
82  DEBUG_FPUTS ("test2e: ");
83  test2e (f1, f2, 14, 15.0);
84  checki (f1_val, 14);
85  checkd (f2_val, 15.0);
86  DEBUG_NL;
87  DEBUG_FPUTS ("test2f: ");
88  test2f (f1, 16, f2, 17.0);
89  checki (f1_val, 16);
90  checkd (f2_val, 17.0);
91  DEBUG_NL;
92  DEBUG_FPUTS ("test2g: ");
93  test2g (f1, 18, 19.0, f2);
94  checki (f1_val, 18);
95  checkd (f2_val, 19.0);
96  DEBUG_NL;
97  DEBUG_FPUTS ("test2h: ");
98  test2h (20.0, f2, f1, 21);
99  checkd (f2_val, 20.0);
100  checki (f1_val, 21);
101  DEBUG_NL;
102  DEBUG_FPUTS ("test2i: ");
103  test2i (22.0, f2, 23, f1);
104  checkd (f2_val, 22.0);
105  checki (f1_val, 23);
106  DEBUG_NL;
107  DEBUG_FPUTS ("test2j: ");
108  test2j (24, 25.0, f1, f2);
109  checki (f1_val, 24);
110  checkd (f2_val, 25.0);
111  if (test_va)
112    {
113      DEBUG_NL;
114      DEBUG_FPUTS ("testva: ");
115      testva (1, f1);
116      DEBUG_NL;
117      DEBUG_FPUTS ("        ");
118      testva (2, f1, f1);
119      DEBUG_NL;
120      DEBUG_FPUTS ("        ");
121      testva (3, f1, f1, f1);
122      DEBUG_NL;
123      DEBUG_FPUTS ("        ");
124      testva (4, f1, f1, f1, f1);
125      DEBUG_NL;
126      DEBUG_FPUTS ("        ");
127      testva (5, f1, f1, f1, f1, f1);
128      DEBUG_NL;
129      DEBUG_FPUTS ("        ");
130      testva (6, f1, f1, f1, f1, f1, f1);
131      DEBUG_NL;
132      DEBUG_FPUTS ("        ");
133      testva (7, f1, f1, f1, f1, f1, f1, f1);
134      DEBUG_NL;
135      DEBUG_FPUTS ("        ");
136      testva (8, f1, f1, f1, f1, f1, f1, f1, f1);
137      DEBUG_NL;
138      DEBUG_FPUTS ("        ");
139      testva (9, f1, f1, f1, f1, f1, f1, f1, f1, f1);
140      DEBUG_NL;
141      DEBUG_FPUTS ("        ");
142      testva (10, f1, f1, f1, f1, f1, f1, f1, f1, f1, f1);
143      DEBUG_NL;
144      DEBUG_FPUTS ("        ");
145      testva (11, f1, f1, f1, f1, f1, f1, f1, f1, f1, f1, f1);
146      DEBUG_NL;
147      DEBUG_FPUTS ("        ");
148      testva (12, f1, f1, f1, f1, f1, f1, f1, f1, f1, f1, f1, f1);
149    }
150  DEBUG_NL;
151}
152
153void
154fnptr_by_value_1_x ()
155{
156  DEBUG_INIT
157  testit ();
158  DEBUG_FINI
159
160  if (fails != 0)
161    abort ();
162}
163