1b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink/* Ltrace Test : parameters.c.
2b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink   Objectives  : Verify that Ltrace can handle all the different
3b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink   parameter types
4b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink
5b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink   This file was written by Steve Fink <sphink@gmail.com>. */
6b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink
7b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink#include <stdio.h>
8b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink#include <unistd.h>
9b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink#include <sys/syscall.h>
10b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink#include <sys/stat.h>
11b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink#include <errno.h>
12b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink#include <string.h>
13b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink#include <stdlib.h>
14b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink
15b2c254573fbf30189293be6b7f2ef307c499704cSteve Finkvoid func_intptr(int *i);
16b2c254573fbf30189293be6b7f2ef307c499704cSteve Finkvoid func_intptr_ret(int *i);
17b2c254573fbf30189293be6b7f2ef307c499704cSteve Finkint func_strlen(char*);
18b2c254573fbf30189293be6b7f2ef307c499704cSteve Finkvoid func_strfixed(char*);
19b2c254573fbf30189293be6b7f2ef307c499704cSteve Finkvoid func_ppp(int***);
20b2c254573fbf30189293be6b7f2ef307c499704cSteve Finkvoid func_stringp(char**);
216fa27c330f9e07c5be553614b9c6e2f08461780fSteve Finkvoid func_short(short, short);
226fa27c330f9e07c5be553614b9c6e2f08461780fSteve Finkvoid func_ushort(unsigned short, unsigned short);
231607793a00298f9d5a857dac73de2dd6a6510725Petr Machatafloat func_float(float, float);
241607793a00298f9d5a857dac73de2dd6a6510725Petr Machatadouble func_double(double, double);
251150bc4b812f0150e832607b8724b023d6d7d575Steve Finkvoid func_arrayi(int*, int);
261150bc4b812f0150e832607b8724b023d6d7d575Steve Finkvoid func_arrayf(float*, int);
27e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Finkvoid func_struct(void*);
28b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink
296a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Finktypedef enum {
306a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink  RED,
316a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink  GREEN,
326a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink  BLUE,
336a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink  CHARTREUSE,
346a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink  PETUNIA
356a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink} color_t;
366a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Finkvoid func_enum(color_t);
37e22411dd33d2d55fd5c6510390954f13fd502d3aSteve Finkvoid func_typedef(color_t);
386a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
391bcd05943ebff28c1537d61d584c7f874d963d27Petr Machatavoid func_work(char *x);
401bcd05943ebff28c1537d61d584c7f874d963d27Petr Machatavoid func_call(char *x, char *y, void (*cb)(char *));
41280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata
421bcd05943ebff28c1537d61d584c7f874d963d27Petr Machatavoid
431bcd05943ebff28c1537d61d584c7f874d963d27Petr Machatacall_func_work (char *x)
441bcd05943ebff28c1537d61d584c7f874d963d27Petr Machata{
451bcd05943ebff28c1537d61d584c7f874d963d27Petr Machata	func_work(x);
461bcd05943ebff28c1537d61d584c7f874d963d27Petr Machata}
471bcd05943ebff28c1537d61d584c7f874d963d27Petr Machata
481bcd05943ebff28c1537d61d584c7f874d963d27Petr Machataint
49b2c254573fbf30189293be6b7f2ef307c499704cSteve Finkmain ()
50b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink{
51b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  int x = 17;
52b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  int *xP, **xPP;
53b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  char buf[200];
54b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  char *s;
551150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  int *ai;
561150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  float *af;
576a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
58b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  func_intptr(&x);
596a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
60b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  func_intptr_ret(&x);
616a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
62b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_string("zero\0xxxxxxxxxxxxxx");
63b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  func_strlen(buf);
6483b3189516cab1e42854308f151b2ce5d2dd2364Petr Machata
6583b3189516cab1e42854308f151b2ce5d2dd2364Petr Machata  extern int func_arg0(char *);
6683b3189516cab1e42854308f151b2ce5d2dd2364Petr Machata  func_arg0(buf);
6783b3189516cab1e42854308f151b2ce5d2dd2364Petr Machata
68b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  printf("%s\n", buf);
696a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
70b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  func_strfixed(buf);
71b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  printf("%s\n", buf);
726a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
73b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  x = 80;
74b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  xP = &x;
75b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  xPP = &xP;
76b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  func_ppp(&xPP);
776a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
78b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  s = (char*) malloc(100);
79b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  strcpy(s, "Dude");
80b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  func_stringp(&s);
816a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
826a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink  func_enum(BLUE);
836fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink
846fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink  func_short(-8, -9);
856fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink  func_ushort(33, 34);
861607793a00298f9d5a857dac73de2dd6a6510725Petr Machata  float f = func_float(3.4, -3.4);
871607793a00298f9d5a857dac73de2dd6a6510725Petr Machata  double d = func_double(3.4, -3.4);
886fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink
89e22411dd33d2d55fd5c6510390954f13fd502d3aSteve Fink  func_typedef(BLUE);
90e22411dd33d2d55fd5c6510390954f13fd502d3aSteve Fink
911150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  ai = (int*) calloc(sizeof(int), 8);
921150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  for (x = 0; x < 8; x++)
931150bc4b812f0150e832607b8724b023d6d7d575Steve Fink    ai[x] = 10 + x;
941150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  func_arrayi(ai, 8);
951150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  func_arrayi(ai, 2);
961150bc4b812f0150e832607b8724b023d6d7d575Steve Fink
971150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  af = (float*) calloc(sizeof(float), 8);
981150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  for (x = 0; x < 8; x++)
991150bc4b812f0150e832607b8724b023d6d7d575Steve Fink    af[x] = 10.1 + x;
1001150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  func_arrayf(af, 8);
1011150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  func_arrayf(af, 2);
1021150bc4b812f0150e832607b8724b023d6d7d575Steve Fink
103e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink  {
104e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    struct {
105e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      int simple;
106e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      int alen;
107e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      int slen;
108e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      struct { int a; int b; }* array;
109e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      struct { int a; int b; } seq[3];
110e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      char* str;
111e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    } x;
112e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
113e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.simple = 89;
114e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
115e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.alen = 2;
116e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array = malloc(800);
117e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array[0].a = 1;
118e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array[0].b = 10;
119e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array[1].a = 3;
120e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array[1].b = 30;
121e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
122e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[0].a = 4;
123e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[0].b = 40;
124e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[1].a = 5;
125e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[1].b = 50;
126e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[2].a = 6;
127e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[2].b = 60;
128e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
129e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.slen = 3;
130e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.str = "123junk";
131e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
132e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    func_struct(&x);
133e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink  }
134e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
135280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata  {
136280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata    char x[10] = {};
137280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata    char y[10] = {};
1381bcd05943ebff28c1537d61d584c7f874d963d27Petr Machata    func_call(x, y, call_func_work);
139280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata  }
140280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata
141b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S2 {
142b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    float f;
143b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char a;
144b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char b;
145b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
146b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S3 {
147b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char a[6];
148b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    float f;
149b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
150b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S2 func_struct_2(int, struct S3 s3, double d);
151b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_struct_2(17, (struct S3){ "ABCDE", 0.25 }, 0.5);
152b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
153b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S4 {
154b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long a;
155b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long b;
156b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long c;
157b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long d;
158b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
159b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S4 func_struct_large(struct S4 a, struct S4 b);
160b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_struct_large((struct S4){ 1, 2, 3, 4 }, (struct S4){ 5, 6, 7, 8 });
161b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
162b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S5 {
163b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char a;
164b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char b;
165b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long c;
166b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long d;
167b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
168b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S5 func_struct_large2(struct S5 a, struct S5 b);
169b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_struct_large2((struct S5){ '0', '1', 3, 4 }, (struct S5){ '2', '3', 7, 8 });
170b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
171b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S6 {
172b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long a;
173b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long b;
174b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char c;
175b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char d;
176b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
177b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S6 func_struct_large3(struct S6 a, struct S6 b);
178b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_struct_large3((struct S6){ 3, 4, '0', '1' }, (struct S6){ 7, 8 ,'2', '3' });
179b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
180b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  void func_many_args(int a, int b, long c, double d, char e, int f, float g,
181b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		      char h, int i, double j, int k, double l, char m, int n,
182b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		      short o, int p, char q, float r, float s, double t,
183b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		      long u, float v, float w, float x, float y);
184b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_many_args(1, 2, 3, 4.0, '5', 6, 7.0,
185b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		 '8', 9, 10.0, 11, 12.0, 'A', 14,
186b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		 15, 16, 'B', 18.0, 19.0, 20.0,
187b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		 21, 22.0, 23.0, 24.0, 25.0);
188b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
18951e74aca71ff7e8be91c074afd4f2264f46294e9Petr Machata  void func_printf(char *format, ...);
19051e74aca71ff7e8be91c074afd4f2264f46294e9Petr Machata  func_printf("sotnuh %d %ld %g %c\n", 5, 6L, 1.5, 'X');
19151e74aca71ff7e8be91c074afd4f2264f46294e9Petr Machata  func_printf("sotnuh1 %d %ld %hd\n", 5, 6L, (short)7);
19251e74aca71ff7e8be91c074afd4f2264f46294e9Petr Machata  func_printf("sotnuh2 %s %10s %10s\n", "a string", "a trimmed string", "short");
19351e74aca71ff7e8be91c074afd4f2264f46294e9Petr Machata  func_printf("many_args"
194b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 "%d %d %ld %g %c %d %g "
195b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 "%c %d %g %d %g %c %d "
196b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 "%hd %d %c %g %g %g "
197b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 "%ld %g %g %g %g",
19851d85d99f3ed74c01109b1040499c3a01f68361cEdgar E. Iglesias	 1, 2, 3L, 4.0, '5', 6, 7.0,
199b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 '8', 9, 10.0, 11, 12.0, 'A', 14,
200b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 (short)15, 16, 'B', 18.0, 19.0, 20.0,
201b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 21L, 22.0, 23.0, 24.0, 25.0);
202b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
20351e74aca71ff7e8be91c074afd4f2264f46294e9Petr Machata  func_printf("sotnuh3 %*s\n", 4, "a trimmed string");
204b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
2053a8a91ca57f66d664b3fbd19882e6d163c7ad496Edgar E. Iglesias  void func_sprintf(char *str, char *format, ...);
2063a8a91ca57f66d664b3fbd19882e6d163c7ad496Edgar E. Iglesias  func_sprintf(NULL, "test %d %d %d %d\n", 1, 2, 3, 4);
2073a8a91ca57f66d664b3fbd19882e6d163c7ad496Edgar E. Iglesias
208ce034981e2880eecb8a196c78182dfb4ae67850fPetr Machata  void func_lens(int, long, short, long);
209ce034981e2880eecb8a196c78182dfb4ae67850fPetr Machata  func_lens(22, 23, 24, 25);
210ce034981e2880eecb8a196c78182dfb4ae67850fPetr Machata
211e3f4a984db115979e09414b7281da98399dd8949Petr Machata  int func_bool(int a, int b);
212e3f4a984db115979e09414b7281da98399dd8949Petr Machata  func_bool(1, 10);
213e3f4a984db115979e09414b7281da98399dd8949Petr Machata  func_bool(2, 0);
214e3f4a984db115979e09414b7281da98399dd8949Petr Machata
2150ceae2a763aee33e23808edc7bece9888c583411Petr Machata  void func_hide(int a, int b, int c, int d, int e, int f, int g, int h);
2160ceae2a763aee33e23808edc7bece9888c583411Petr Machata  func_hide(1, 2, 3, 4, 5, 6, 7, 8);
2170ceae2a763aee33e23808edc7bece9888c583411Petr Machata
2180ceae2a763aee33e23808edc7bece9888c583411Petr Machata  struct func_hide_struct {
2190ceae2a763aee33e23808edc7bece9888c583411Petr Machata	  int a; int b; int c; int d; int e; int f; int g; int h;
2200ceae2a763aee33e23808edc7bece9888c583411Petr Machata  };
2210ceae2a763aee33e23808edc7bece9888c583411Petr Machata  void func_hide_struct(struct func_hide_struct hs);
2220ceae2a763aee33e23808edc7bece9888c583411Petr Machata  func_hide_struct((struct func_hide_struct){1, 2, 3, 4, 5, 6, 7, 8});
223e3f4a984db115979e09414b7281da98399dd8949Petr Machata
224c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  enum ab { A, B };
225c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  long *func_short_enums(short abs[]);
226c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  func_short_enums((short[]){ A, B, A, A });
227c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata
228c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  long func_negative_enum(short a, unsigned short b, int c, unsigned d,
229c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata                         long e, unsigned long f);
230c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  func_negative_enum(-1, -1, -1, -1, -1, -1);
231c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata
232e3f4a984db115979e09414b7281da98399dd8949Petr Machata  void func_charp_string(char *p);
233e3f4a984db115979e09414b7281da98399dd8949Petr Machata  func_charp_string("null-terminated string");
234e3f4a984db115979e09414b7281da98399dd8949Petr Machata
235a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_empty {};
236a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_empty func_struct_empty(struct struct_empty e);
237a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_empty((struct struct_empty) {});
238a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
239a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size1 { char a; };
240a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size1 func_struct_size1(struct struct_size1 e);
241a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_size1((struct struct_size1){ '5' });
242a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
243a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size2 { short a; };
244a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size2 func_struct_size2(struct struct_size2 e);
245a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_size2((struct struct_size2){ 5 });
246a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
247a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size4 { int a; };
248a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size4 func_struct_size4(struct struct_size4 e);
249a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_size4((struct struct_size4){ 5 });
250a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
251a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size8 { int a; int b; };
252a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size8 func_struct_size8(struct struct_size8 e);
253a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_size8((struct struct_size8){ 5, 6 });
254a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
2556fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink  return 0;
256b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink}
257