Ruby  2.4.2p198(2017-09-14revision59899)
huge_struct.c
Go to the documentation of this file.
1 /* Area: ffi_call, closure_call
2  Purpose: Check large structure returns.
3  Limitations: none.
4  PR: none.
5  Originator: Blake Chaffin 6/18/2007
6 */
7 
8 /* { dg-excess-errors "" { target x86_64-*-mingw* x86_64-*-cygwin* } } */
9 /* { dg-do run { xfail strongarm*-*-* xscale*-*-* } } */
10 /* { dg-options -mlong-double-128 { target powerpc64*-*-linux* } } */
11 /* { dg-options -Wformat=0 { target moxie*-*-elf } } */
12 /* { dg-output "" { xfail x86_64-*-mingw* x86_64-*-cygwin* } } */
13 
14 #include "ffitest.h"
15 
16 typedef struct BigStruct{
18  int8_t b;
19  uint16_t c;
20  int16_t d;
22  int32_t f;
24  int64_t h;
25  float i;
26  double j;
27  long double k;
28  char* l;
30  int8_t n;
31  uint16_t o;
32  int16_t p;
34  int32_t r;
36  int64_t t;
37  float u;
38  double v;
39  long double w;
40  char* x;
42  int8_t z;
43  uint16_t aa;
44  int16_t bb;
46  int32_t dd;
48  int64_t ff;
49  float gg;
50  double hh;
51  long double ii;
52  char* jj;
54  int8_t ll;
55  uint16_t mm;
56  int16_t nn;
58  int32_t pp;
60  int64_t rr;
61  float ss;
62  double tt;
63  long double uu;
64  char* vv;
66  int8_t xx;
67 } BigStruct;
68 
71  uint8_t ui8_1,
72  int8_t si8_1,
73  uint16_t ui16_1,
74  int16_t si16_1,
75  uint32_t ui32_1,
76  int32_t si32_1,
77  uint64_t ui64_1,
78  int64_t si64_1,
79  float f_1,
80  double d_1,
81  long double ld_1,
82  char* p_1,
83  uint8_t ui8_2,
84  int8_t si8_2,
85  uint16_t ui16_2,
86  int16_t si16_2,
87  uint32_t ui32_2,
88  int32_t si32_2,
89  uint64_t ui64_2,
90  int64_t si64_2,
91  float f_2,
92  double d_2,
93  long double ld_2,
94  char* p_2,
95  uint8_t ui8_3,
96  int8_t si8_3,
97  uint16_t ui16_3,
98  int16_t si16_3,
99  uint32_t ui32_3,
100  int32_t si32_3,
101  uint64_t ui64_3,
102  int64_t si64_3,
103  float f_3,
104  double d_3,
105  long double ld_3,
106  char* p_3,
107  uint8_t ui8_4,
108  int8_t si8_4,
109  uint16_t ui16_4,
110  int16_t si16_4,
111  uint32_t ui32_4,
112  int32_t si32_4,
113  uint64_t ui64_4,
114  int64_t si64_4,
115  float f_4,
116  double d_4,
117  long double ld_4,
118  char* p_4,
119  uint8_t ui8_5,
120  int8_t si8_5)
121 {
122  BigStruct retVal = {
123  ui8_1 + 1, si8_1 + 1, ui16_1 + 1, si16_1 + 1, ui32_1 + 1, si32_1 + 1,
124  ui64_1 + 1, si64_1 + 1, f_1 + 1, d_1 + 1, ld_1 + 1, (char*)((intptr_t)p_1 + 1),
125  ui8_2 + 2, si8_2 + 2, ui16_2 + 2, si16_2 + 2, ui32_2 + 2, si32_2 + 2,
126  ui64_2 + 2, si64_2 + 2, f_2 + 2, d_2 + 2, ld_2 + 2, (char*)((intptr_t)p_2 + 2),
127  ui8_3 + 3, si8_3 + 3, ui16_3 + 3, si16_3 + 3, ui32_3 + 3, si32_3 + 3,
128  ui64_3 + 3, si64_3 + 3, f_3 + 3, d_3 + 3, ld_3 + 3, (char*)((intptr_t)p_3 + 3),
129  ui8_4 + 4, si8_4 + 4, ui16_4 + 4, si16_4 + 4, ui32_4 + 4, si32_4 + 4,
130  ui64_4 + 4, si64_4 + 4, f_4 + 4, d_4 + 4, ld_4 + 4, (char*)((intptr_t)p_4 + 4),
131  ui8_5 + 5, si8_5 + 5};
132 
133  printf("%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
134  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
135  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
136  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 ": "
137  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
138  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
139  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
140  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
141  ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, (unsigned long)p_1,
142  ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, (unsigned long)p_2,
143  ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, (unsigned long)p_3,
144  ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, (unsigned long)p_4, ui8_5, si8_5,
145  retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
146  retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
147  retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
148  retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
149  retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
150  retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
151  retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
152  retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
153 
154  return retVal;
155 }
156 
157 static void
158 cls_large_fn(ffi_cif* cif __UNUSED__, void* resp, void** args, void* userdata __UNUSED__)
159 {
160  uint8_t ui8_1 = *(uint8_t*)args[0];
161  int8_t si8_1 = *(int8_t*)args[1];
162  uint16_t ui16_1 = *(uint16_t*)args[2];
163  int16_t si16_1 = *(int16_t*)args[3];
164  uint32_t ui32_1 = *(uint32_t*)args[4];
165  int32_t si32_1 = *(int32_t*)args[5];
166  uint64_t ui64_1 = *(uint64_t*)args[6];
167  int64_t si64_1 = *(int64_t*)args[7];
168  float f_1 = *(float*)args[8];
169  double d_1 = *(double*)args[9];
170  long double ld_1 = *(long double*)args[10];
171  char* p_1 = *(char**)args[11];
172  uint8_t ui8_2 = *(uint8_t*)args[12];
173  int8_t si8_2 = *(int8_t*)args[13];
174  uint16_t ui16_2 = *(uint16_t*)args[14];
175  int16_t si16_2 = *(int16_t*)args[15];
176  uint32_t ui32_2 = *(uint32_t*)args[16];
177  int32_t si32_2 = *(int32_t*)args[17];
178  uint64_t ui64_2 = *(uint64_t*)args[18];
179  int64_t si64_2 = *(int64_t*)args[19];
180  float f_2 = *(float*)args[20];
181  double d_2 = *(double*)args[21];
182  long double ld_2 = *(long double*)args[22];
183  char* p_2 = *(char**)args[23];
184  uint8_t ui8_3 = *(uint8_t*)args[24];
185  int8_t si8_3 = *(int8_t*)args[25];
186  uint16_t ui16_3 = *(uint16_t*)args[26];
187  int16_t si16_3 = *(int16_t*)args[27];
188  uint32_t ui32_3 = *(uint32_t*)args[28];
189  int32_t si32_3 = *(int32_t*)args[29];
190  uint64_t ui64_3 = *(uint64_t*)args[30];
191  int64_t si64_3 = *(int64_t*)args[31];
192  float f_3 = *(float*)args[32];
193  double d_3 = *(double*)args[33];
194  long double ld_3 = *(long double*)args[34];
195  char* p_3 = *(char**)args[35];
196  uint8_t ui8_4 = *(uint8_t*)args[36];
197  int8_t si8_4 = *(int8_t*)args[37];
198  uint16_t ui16_4 = *(uint16_t*)args[38];
199  int16_t si16_4 = *(int16_t*)args[39];
200  uint32_t ui32_4 = *(uint32_t*)args[40];
201  int32_t si32_4 = *(int32_t*)args[41];
202  uint64_t ui64_4 = *(uint64_t*)args[42];
203  int64_t si64_4 = *(int64_t*)args[43];
204  float f_4 = *(float*)args[44];
205  double d_4 = *(double*)args[45];
206  long double ld_4 = *(long double*)args[46];
207  char* p_4 = *(char**)args[47];
208  uint8_t ui8_5 = *(uint8_t*)args[48];
209  int8_t si8_5 = *(int8_t*)args[49];
210 
211  *(BigStruct*)resp = test_large_fn(
212  ui8_1, si8_1, ui16_1, si16_1, ui32_1, si32_1, ui64_1, si64_1, f_1, d_1, ld_1, p_1,
213  ui8_2, si8_2, ui16_2, si16_2, ui32_2, si32_2, ui64_2, si64_2, f_2, d_2, ld_2, p_2,
214  ui8_3, si8_3, ui16_3, si16_3, ui32_3, si32_3, ui64_3, si64_3, f_3, d_3, ld_3, p_3,
215  ui8_4, si8_4, ui16_4, si16_4, ui32_4, si32_4, ui64_4, si64_4, f_4, d_4, ld_4, p_4,
216  ui8_5, si8_5);
217 }
218 
219 int
220 main(int argc __UNUSED__, const char** argv __UNUSED__)
221 {
222  void *code;
223  ffi_closure *pcl = ffi_closure_alloc(sizeof(ffi_closure), &code);
224 
225  ffi_cif cif;
226  ffi_type* argTypes[51];
227  void* argValues[51];
228 
229  ffi_type ret_struct_type;
230  ffi_type* st_fields[51];
231  BigStruct retVal;
232 
233  uint8_t ui8 = 1;
234  int8_t si8 = 2;
235  uint16_t ui16 = 3;
236  int16_t si16 = 4;
237  uint32_t ui32 = 5;
238  int32_t si32 = 6;
239  uint64_t ui64 = 7;
240  int64_t si64 = 8;
241  float f = 9;
242  double d = 10;
243  long double ld = 11;
244  char* p = (char*)0x12345678;
245 
246  memset (&retVal, 0, sizeof(retVal));
247 
248  ret_struct_type.size = 0;
249  ret_struct_type.alignment = 0;
250  ret_struct_type.type = FFI_TYPE_STRUCT;
251  ret_struct_type.elements = st_fields;
252 
253  st_fields[0] = st_fields[12] = st_fields[24] = st_fields[36] = st_fields[48] = &ffi_type_uint8;
254  st_fields[1] = st_fields[13] = st_fields[25] = st_fields[37] = st_fields[49] = &ffi_type_sint8;
255  st_fields[2] = st_fields[14] = st_fields[26] = st_fields[38] = &ffi_type_uint16;
256  st_fields[3] = st_fields[15] = st_fields[27] = st_fields[39] = &ffi_type_sint16;
257  st_fields[4] = st_fields[16] = st_fields[28] = st_fields[40] = &ffi_type_uint32;
258  st_fields[5] = st_fields[17] = st_fields[29] = st_fields[41] = &ffi_type_sint32;
259  st_fields[6] = st_fields[18] = st_fields[30] = st_fields[42] = &ffi_type_uint64;
260  st_fields[7] = st_fields[19] = st_fields[31] = st_fields[43] = &ffi_type_sint64;
261  st_fields[8] = st_fields[20] = st_fields[32] = st_fields[44] = &ffi_type_float;
262  st_fields[9] = st_fields[21] = st_fields[33] = st_fields[45] = &ffi_type_double;
263  st_fields[10] = st_fields[22] = st_fields[34] = st_fields[46] = &ffi_type_longdouble;
264  st_fields[11] = st_fields[23] = st_fields[35] = st_fields[47] = &ffi_type_pointer;
265 
266  st_fields[50] = NULL;
267 
268  argTypes[0] = argTypes[12] = argTypes[24] = argTypes[36] = argTypes[48] = &ffi_type_uint8;
269  argValues[0] = argValues[12] = argValues[24] = argValues[36] = argValues[48] = &ui8;
270  argTypes[1] = argTypes[13] = argTypes[25] = argTypes[37] = argTypes[49] = &ffi_type_sint8;
271  argValues[1] = argValues[13] = argValues[25] = argValues[37] = argValues[49] = &si8;
272  argTypes[2] = argTypes[14] = argTypes[26] = argTypes[38] = &ffi_type_uint16;
273  argValues[2] = argValues[14] = argValues[26] = argValues[38] = &ui16;
274  argTypes[3] = argTypes[15] = argTypes[27] = argTypes[39] = &ffi_type_sint16;
275  argValues[3] = argValues[15] = argValues[27] = argValues[39] = &si16;
276  argTypes[4] = argTypes[16] = argTypes[28] = argTypes[40] = &ffi_type_uint32;
277  argValues[4] = argValues[16] = argValues[28] = argValues[40] = &ui32;
278  argTypes[5] = argTypes[17] = argTypes[29] = argTypes[41] = &ffi_type_sint32;
279  argValues[5] = argValues[17] = argValues[29] = argValues[41] = &si32;
280  argTypes[6] = argTypes[18] = argTypes[30] = argTypes[42] = &ffi_type_uint64;
281  argValues[6] = argValues[18] = argValues[30] = argValues[42] = &ui64;
282  argTypes[7] = argTypes[19] = argTypes[31] = argTypes[43] = &ffi_type_sint64;
283  argValues[7] = argValues[19] = argValues[31] = argValues[43] = &si64;
284  argTypes[8] = argTypes[20] = argTypes[32] = argTypes[44] = &ffi_type_float;
285  argValues[8] = argValues[20] = argValues[32] = argValues[44] = &f;
286  argTypes[9] = argTypes[21] = argTypes[33] = argTypes[45] = &ffi_type_double;
287  argValues[9] = argValues[21] = argValues[33] = argValues[45] = &d;
288  argTypes[10] = argTypes[22] = argTypes[34] = argTypes[46] = &ffi_type_longdouble;
289  argValues[10] = argValues[22] = argValues[34] = argValues[46] = &ld;
290  argTypes[11] = argTypes[23] = argTypes[35] = argTypes[47] = &ffi_type_pointer;
291  argValues[11] = argValues[23] = argValues[35] = argValues[47] = &p;
292 
293  argTypes[50] = NULL;
294  argValues[50] = NULL;
295 
296  CHECK(ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 50, &ret_struct_type, argTypes) == FFI_OK);
297 
298  ffi_call(&cif, FFI_FN(test_large_fn), &retVal, argValues);
299  /* { dg-output "1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
300  printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
301  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
302  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
303  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
304  retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
305  retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
306  retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
307  retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
308  retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
309  retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
310  retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
311  retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
312  /* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
313 
314  CHECK(ffi_prep_closure_loc(pcl, &cif, cls_large_fn, NULL, code) == FFI_OK);
315 
316  retVal = ((BigStruct(*)(
317  uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
318  uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
319  uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
320  uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t, float, double, long double, char*,
321  uint8_t, int8_t))(code))(
322  ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
323  ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
324  ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
325  ui8, si8, ui16, si16, ui32, si32, ui64, si64, f, d, ld, p,
326  ui8, si8);
327  /* { dg-output "\n1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2 3 4 5 6 7 8 9 10 11 0x12345678 1 2: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
328  printf("res: %" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
329  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
330  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx "
331  "%" PRIu8 " %" PRId8 " %hu %hd %u %d %" PRIu64 " %" PRId64 " %.0f %.0f %.0Lf %#lx %" PRIu8 " %" PRId8 "\n",
332  retVal.a, retVal.b, retVal.c, retVal.d, retVal.e, retVal.f,
333  retVal.g, retVal.h, retVal.i, retVal.j, retVal.k, (unsigned long)retVal.l,
334  retVal.m, retVal.n, retVal.o, retVal.p, retVal.q, retVal.r,
335  retVal.s, retVal.t, retVal.u, retVal.v, retVal.w, (unsigned long)retVal.x,
336  retVal.y, retVal.z, retVal.aa, retVal.bb, retVal.cc, retVal.dd,
337  retVal.ee, retVal.ff, retVal.gg, retVal.hh, retVal.ii, (unsigned long)retVal.jj,
338  retVal.kk, retVal.ll, retVal.mm, retVal.nn, retVal.oo, retVal.pp,
339  retVal.qq, retVal.rr, retVal.ss, retVal.tt, retVal.uu, (unsigned long)retVal.vv, retVal.ww, retVal.xx);
340  /* { dg-output "\nres: 2 3 4 5 6 7 8 9 10 11 12 0x12345679 3 4 5 6 7 8 9 10 11 12 13 0x1234567a 4 5 6 7 8 9 10 11 12 13 14 0x1234567b 5 6 7 8 9 10 11 12 13 14 15 0x1234567c 6 7" } */
341 
342  return 0;
343 }
static void cls_large_fn(ffi_cif *cif __UNUSED__, void *resp, void **args, void *userdata __UNUSED__)
Definition: huge_struct.c:158
uint8_t m
Definition: huge_struct.c:29
double v
Definition: huge_struct.c:38
float u
Definition: huge_struct.c:37
uint32_t e
Definition: huge_struct.c:21
uint32_t q
Definition: huge_struct.c:33
int8_t z
Definition: huge_struct.c:42
uint16_t c
Definition: huge_struct.c:19
double j
Definition: huge_struct.c:26
double tt
Definition: huge_struct.c:62
uint8_t y
Definition: huge_struct.c:41
float ss
Definition: huge_struct.c:61
char * l
Definition: huge_struct.c:28
uint32_t oo
Definition: huge_struct.c:57
unsigned char uint8_t
Definition: sha2.h:100
uint64_t s
Definition: huge_struct.c:35
int32_t r
Definition: huge_struct.c:34
unsigned long long uint64_t
Definition: sha2.h:102
uint64_t ee
Definition: huge_struct.c:47
int16_t nn
Definition: huge_struct.c:56
long double w
Definition: huge_struct.c:39
int16_t d
Definition: huge_struct.c:20
#define __UNUSED__
Definition: ffitest.h:28
struct BigStruct BigStruct
int argc
Definition: ruby.c:183
double hh
Definition: huge_struct.c:50
int8_t n
Definition: huge_struct.c:30
BigStruct test_large_fn(uint8_t ui8_1, int8_t si8_1, uint16_t ui16_1, int16_t si16_1, uint32_t ui32_1, int32_t si32_1, uint64_t ui64_1, int64_t si64_1, float f_1, double d_1, long double ld_1, char *p_1, uint8_t ui8_2, int8_t si8_2, uint16_t ui16_2, int16_t si16_2, uint32_t ui32_2, int32_t si32_2, uint64_t ui64_2, int64_t si64_2, float f_2, double d_2, long double ld_2, char *p_2, uint8_t ui8_3, int8_t si8_3, uint16_t ui16_3, int16_t si16_3, uint32_t ui32_3, int32_t si32_3, uint64_t ui64_3, int64_t si64_3, float f_3, double d_3, long double ld_3, char *p_3, uint8_t ui8_4, int8_t si8_4, uint16_t ui16_4, int16_t si16_4, uint32_t ui32_4, int32_t si32_4, uint64_t ui64_4, int64_t si64_4, float f_4, double d_4, long double ld_4, char *p_4, uint8_t ui8_5, int8_t si8_5)
Definition: huge_struct.c:70
ffi_status ffi_prep_closure_loc(ffi_closure *closure, ffi_cif *cif, void(*fun)(ffi_cif *, void *, void **, void *), void *user_data, void *codeloc)
Definition: ffi.c:928
uint16_t mm
Definition: huge_struct.c:55
int64_t h
Definition: huge_struct.c:24
int16_t bb
Definition: huge_struct.c:44
uint16_t o
Definition: huge_struct.c:31
float gg
Definition: huge_struct.c:49
int32_t pp
Definition: huge_struct.c:58
uint8_t ww
Definition: huge_struct.c:65
int32_t dd
Definition: huge_struct.c:46
int64_t rr
Definition: huge_struct.c:60
void ffi_call(ffi_cif *cif, void(*fn)(void), void *rvalue, void **avalue)
Definition: ffi.c:813
float i
Definition: huge_struct.c:25
int64_t ff
Definition: huge_struct.c:48
long double uu
Definition: huge_struct.c:63
long double ii
Definition: huge_struct.c:51
int intptr_t
Definition: win32.h:90
int8_t xx
Definition: huge_struct.c:66
uint32_t cc
Definition: huge_struct.c:45
int main(int argc __UNUSED__, const char **argv __UNUSED__)
Definition: huge_struct.c:220
unsigned int uint32_t
Definition: sha2.h:101
int16_t p
Definition: huge_struct.c:32
char * jj
Definition: huge_struct.c:52
long double k
Definition: huge_struct.c:27
uint8_t kk
Definition: huge_struct.c:53
int64_t t
Definition: huge_struct.c:36
int8_t ll
Definition: huge_struct.c:54
#define CHECK(sub)
Definition: compile.c:408
char * vv
Definition: huge_struct.c:64
uint16_t aa
Definition: huge_struct.c:43
uint64_t qq
Definition: huge_struct.c:59
#define NULL
Definition: _sdbm.c:102
uint8_t a
Definition: huge_struct.c:17
uint64_t g
Definition: huge_struct.c:23
int32_t f
Definition: huge_struct.c:22
char * x
Definition: huge_struct.c:40
int8_t b
Definition: huge_struct.c:18
char ** argv
Definition: ruby.c:184
ffi_status ffi_prep_cif(ffi_cif *cif, ffi_abi abi, unsigned int nargs, ffi_type *rtype, ffi_type **atypes)
Definition: prep_cif.c:226