parameters.c revision 51d85d99f3ed74c01109b1040499c3a01f68361c
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);
64b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  printf("%s\n", buf);
656a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
66b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  func_strfixed(buf);
67b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  printf("%s\n", buf);
686a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
69b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  x = 80;
70b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  xP = &x;
71b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  xPP = &xP;
72b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  func_ppp(&xPP);
736a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
74b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  s = (char*) malloc(100);
75b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  strcpy(s, "Dude");
76b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink  func_stringp(&s);
776a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink
786a3e24dc1709530e59dd6ae3e91ced1c221fe1b9Steve Fink  func_enum(BLUE);
796fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink
806fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink  func_short(-8, -9);
816fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink  func_ushort(33, 34);
821607793a00298f9d5a857dac73de2dd6a6510725Petr Machata  float f = func_float(3.4, -3.4);
831607793a00298f9d5a857dac73de2dd6a6510725Petr Machata  double d = func_double(3.4, -3.4);
846fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink
85e22411dd33d2d55fd5c6510390954f13fd502d3aSteve Fink  func_typedef(BLUE);
86e22411dd33d2d55fd5c6510390954f13fd502d3aSteve Fink
871150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  ai = (int*) calloc(sizeof(int), 8);
881150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  for (x = 0; x < 8; x++)
891150bc4b812f0150e832607b8724b023d6d7d575Steve Fink    ai[x] = 10 + x;
901150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  func_arrayi(ai, 8);
911150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  func_arrayi(ai, 2);
921150bc4b812f0150e832607b8724b023d6d7d575Steve Fink
931150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  af = (float*) calloc(sizeof(float), 8);
941150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  for (x = 0; x < 8; x++)
951150bc4b812f0150e832607b8724b023d6d7d575Steve Fink    af[x] = 10.1 + x;
961150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  func_arrayf(af, 8);
971150bc4b812f0150e832607b8724b023d6d7d575Steve Fink  func_arrayf(af, 2);
981150bc4b812f0150e832607b8724b023d6d7d575Steve Fink
99e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink  {
100e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    struct {
101e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      int simple;
102e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      int alen;
103e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      int slen;
104e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      struct { int a; int b; }* array;
105e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      struct { int a; int b; } seq[3];
106e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink      char* str;
107e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    } x;
108e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
109e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.simple = 89;
110e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
111e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.alen = 2;
112e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array = malloc(800);
113e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array[0].a = 1;
114e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array[0].b = 10;
115e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array[1].a = 3;
116e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.array[1].b = 30;
117e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
118e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[0].a = 4;
119e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[0].b = 40;
120e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[1].a = 5;
121e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[1].b = 50;
122e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[2].a = 6;
123e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.seq[2].b = 60;
124e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
125e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.slen = 3;
126e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    x.str = "123junk";
127e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
128e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink    func_struct(&x);
129e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink  }
130e4b3263fb2b32eb5ee0f693fc223ed8c363fbd69Steve Fink
131280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata  {
132280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata    char x[10] = {};
133280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata    char y[10] = {};
1341bcd05943ebff28c1537d61d584c7f874d963d27Petr Machata    func_call(x, y, call_func_work);
135280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata  }
136280f829ca87ff6b6c3a242a97fcef01d4488d2c8Petr Machata
137b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S2 {
138b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    float f;
139b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char a;
140b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char b;
141b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
142b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S3 {
143b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char a[6];
144b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    float f;
145b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
146b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S2 func_struct_2(int, struct S3 s3, double d);
147b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_struct_2(17, (struct S3){ "ABCDE", 0.25 }, 0.5);
148b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
149b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S4 {
150b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long a;
151b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long b;
152b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long c;
153b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long d;
154b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
155b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S4 func_struct_large(struct S4 a, struct S4 b);
156b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_struct_large((struct S4){ 1, 2, 3, 4 }, (struct S4){ 5, 6, 7, 8 });
157b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
158b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S5 {
159b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char a;
160b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char b;
161b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long c;
162b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long d;
163b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
164b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S5 func_struct_large2(struct S5 a, struct S5 b);
165b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_struct_large2((struct S5){ '0', '1', 3, 4 }, (struct S5){ '2', '3', 7, 8 });
166b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
167b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S6 {
168b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long a;
169b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    long b;
170b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char c;
171b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata    char d;
172b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  };
173b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  struct S6 func_struct_large3(struct S6 a, struct S6 b);
174b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_struct_large3((struct S6){ 3, 4, '0', '1' }, (struct S6){ 7, 8 ,'2', '3' });
175b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
176b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  void func_many_args(int a, int b, long c, double d, char e, int f, float g,
177b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		      char h, int i, double j, int k, double l, char m, int n,
178b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		      short o, int p, char q, float r, float s, double t,
179b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		      long u, float v, float w, float x, float y);
180b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  func_many_args(1, 2, 3, 4.0, '5', 6, 7.0,
181b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		 '8', 9, 10.0, 11, 12.0, 'A', 14,
182b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		 15, 16, 'B', 18.0, 19.0, 20.0,
183b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata		 21, 22.0, 23.0, 24.0, 25.0);
184b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
185b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  printf("sotnuh %d %ld %g %c\n", 5, 6L, 1.5, 'X');
186b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  printf("sotnuh1 %d %ld %hd\n", 5, 6L, (short)7);
187b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  printf("sotnuh2 %s %10s %10s\n", "a string", "a trimmed string", "short");
188b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  printf("many_args"
189b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 "%d %d %ld %g %c %d %g "
190b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 "%c %d %g %d %g %c %d "
191b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 "%hd %d %c %g %g %g "
192b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 "%ld %g %g %g %g",
19351d85d99f3ed74c01109b1040499c3a01f68361cEdgar E. Iglesias	 1, 2, 3L, 4.0, '5', 6, 7.0,
194b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 '8', 9, 10.0, 11, 12.0, 'A', 14,
195b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 (short)15, 16, 'B', 18.0, 19.0, 20.0,
196b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata	 21L, 22.0, 23.0, 24.0, 25.0);
197b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
198b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata  printf("sotnuh3 %*s\n", 4, "a trimmed string");
199b77f778eda200e0dc1c481e2f7dc5ff322147bd7Petr Machata
200ce034981e2880eecb8a196c78182dfb4ae67850fPetr Machata  void func_lens(int, long, short, long);
201ce034981e2880eecb8a196c78182dfb4ae67850fPetr Machata  func_lens(22, 23, 24, 25);
202ce034981e2880eecb8a196c78182dfb4ae67850fPetr Machata
203e3f4a984db115979e09414b7281da98399dd8949Petr Machata  int func_bool(int a, int b);
204e3f4a984db115979e09414b7281da98399dd8949Petr Machata  func_bool(1, 10);
205e3f4a984db115979e09414b7281da98399dd8949Petr Machata  func_bool(2, 0);
206e3f4a984db115979e09414b7281da98399dd8949Petr Machata
207e3f4a984db115979e09414b7281da98399dd8949Petr Machata  void func_hide(int a, int b, int c, int d, int e, int f);
208e3f4a984db115979e09414b7281da98399dd8949Petr Machata  func_hide(1, 2, 3, 4, 5, 6);
209e3f4a984db115979e09414b7281da98399dd8949Petr Machata
210c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  enum ab { A, B };
211c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  long *func_short_enums(short abs[]);
212c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  func_short_enums((short[]){ A, B, A, A });
213c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata
214c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  long func_negative_enum(short a, unsigned short b, int c, unsigned d,
215c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata                         long e, unsigned long f);
216c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata  func_negative_enum(-1, -1, -1, -1, -1, -1);
217c07a26a8d0f86bc4137eb7b7fea8bbf9021275f1Petr Machata
218e3f4a984db115979e09414b7281da98399dd8949Petr Machata  void func_charp_string(char *p);
219e3f4a984db115979e09414b7281da98399dd8949Petr Machata  func_charp_string("null-terminated string");
220e3f4a984db115979e09414b7281da98399dd8949Petr Machata
221df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct dbl_eqv1 { double d; };
222df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct dbl_eqv2 { struct dbl_eqv1 d; };
223df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct dbl_eqv3 { struct dbl_eqv2 d; };
224df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct dbl_eqv4 { struct dbl_eqv3 d; };
225df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata
226df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct flt_eqv1 { float d; };
227df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct flt_eqv2 { struct flt_eqv1 d; };
228df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct flt_eqv3 { struct flt_eqv2 d; };
229df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct flt_eqv4 { struct flt_eqv3 d; };
230df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata
231df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct dbl_eqv1 func_dbl_eqv(struct dbl_eqv1 a, struct dbl_eqv2 b,
232df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata			       struct dbl_eqv3 c, struct dbl_eqv4 d);
233df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  func_dbl_eqv((struct dbl_eqv1){ 2.5 },
234df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata	       (struct dbl_eqv2){ { 1.5 } },
235df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata	       (struct dbl_eqv3){ { { 0.5 } } },
236df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata	       (struct dbl_eqv4){ { { { -0.5 } } } });
237df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata
238df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  struct flt_eqv1 func_flt_eqv(struct flt_eqv1 a, struct flt_eqv2 b,
239df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata			       struct flt_eqv3 c, struct flt_eqv4 d);
240df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata  func_flt_eqv((struct flt_eqv1){ 2.5 },
241df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata	       (struct flt_eqv2){ { 1.5 } },
242df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata	       (struct flt_eqv3){ { { 0.5 } } },
243df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata	       (struct flt_eqv4){ { { { -0.5 } } } });
244df3e3ce40c5dd3459bb365b684b78d8b1b94c1ecPetr Machata
245a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_empty {};
246a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_empty func_struct_empty(struct struct_empty e);
247a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_empty((struct struct_empty) {});
248a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
249a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size1 { char a; };
250a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size1 func_struct_size1(struct struct_size1 e);
251a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_size1((struct struct_size1){ '5' });
252a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
253a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size2 { short a; };
254a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size2 func_struct_size2(struct struct_size2 e);
255a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_size2((struct struct_size2){ 5 });
256a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
257a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size4 { int a; };
258a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size4 func_struct_size4(struct struct_size4 e);
259a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_size4((struct struct_size4){ 5 });
260a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
261a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size8 { int a; int b; };
262a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  struct struct_size8 func_struct_size8(struct struct_size8 e);
263a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata  func_struct_size8((struct struct_size8){ 5, 6 });
264a81af7c2f7691c1eeb801b7756b13899b79d7568Petr Machata
265248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  /* Test Itanium Homogeneous Floating-point Aggregates.   */
266248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
267248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f2 { float a; struct flt_eqv1 b; };
268248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f2 func_hfa_f2(struct struct_hfa_f2 e);
269248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f2((struct struct_hfa_f2){ 1, { 2 } });
270248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
271248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f3 { float a; struct struct_hfa_f2 b; };
272248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f3 func_hfa_f3(struct struct_hfa_f3 e);
273248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f3((struct struct_hfa_f3){ 3, { 1, { 2 } } });
274248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
275248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f4 { float a; struct struct_hfa_f3 b; };
276248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f4 func_hfa_f4(struct struct_hfa_f4 e);
277248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f4((struct struct_hfa_f4){ 4, { 3, { 1, { 2 } } } });
278248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
279248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f5 { float a; struct struct_hfa_f4 b; };
280248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f5 func_hfa_f5(struct struct_hfa_f5 e);
281248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f5((struct struct_hfa_f5){ 5, { 4, { 3, { 1, { 2 } } } } });
282248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
283248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f6 { float a; struct struct_hfa_f5 b; };
284248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f6 func_hfa_f6(struct struct_hfa_f6 e);
285248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f6((struct struct_hfa_f6){ 6, { 5, { 4, { 3, { 1, { 2 } } } } } });
286248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
287248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f7 { float a; struct struct_hfa_f6 b; };
288248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f7 func_hfa_f7(struct struct_hfa_f7 e);
289248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f7((struct struct_hfa_f7){ 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } });
290248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
291248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f8 { float a; struct struct_hfa_f7 b; };
292248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f8 func_hfa_f8(struct struct_hfa_f8 e);
293248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f8((struct struct_hfa_f8){ 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } });
294248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
295248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f9 { float a; struct struct_hfa_f8 b; };
296248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f9 func_hfa_f9(struct struct_hfa_f9 e);
297248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f9((struct struct_hfa_f9){ 9, { 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } } });
298248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
299248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f10 { float a; struct struct_hfa_f9 b; };
300248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f10 func_hfa_f10(struct struct_hfa_f10 e);
301248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f10((struct struct_hfa_f10){ 10, { 9, { 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } } } });
302248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
303248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f11 { float a; struct struct_hfa_f10 b; };
304248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f11 func_hfa_f11(struct struct_hfa_f11 e);
305248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f11((struct struct_hfa_f11){ 11, { 10, { 9, { 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } } } } });
306248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
307248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f12 { float a; struct struct_hfa_f11 b; };
308248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_f12 func_hfa_f12(struct struct_hfa_f12 e);
309248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_f12((struct struct_hfa_f12){ 12, { 11, { 10, { 9, { 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } } } } } });
310248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
311248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
312248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d2 { double a; struct dbl_eqv1 b; };
313248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d2 func_hfa_d2(struct struct_hfa_d2 e);
314248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d2((struct struct_hfa_d2){ 1, { 2 } });
315248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
316248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d3 { double a; struct struct_hfa_d2 b; };
317248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d3 func_hfa_d3(struct struct_hfa_d3 e);
318248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d3((struct struct_hfa_d3){ 3, { 1, { 2 } } });
319248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
320248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d4 { double a; struct struct_hfa_d3 b; };
321248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d4 func_hfa_d4(struct struct_hfa_d4 e);
322248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d4((struct struct_hfa_d4){ 4, { 3, { 1, { 2 } } } });
323248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
324248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d5 { double a; struct struct_hfa_d4 b; };
325248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d5 func_hfa_d5(struct struct_hfa_d5 e);
326248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d5((struct struct_hfa_d5){ 5, { 4, { 3, { 1, { 2 } } } } });
327248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
328248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d6 { double a; struct struct_hfa_d5 b; };
329248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d6 func_hfa_d6(struct struct_hfa_d6 e);
330248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d6((struct struct_hfa_d6){ 6, { 5, { 4, { 3, { 1, { 2 } } } } } });
331248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
332248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d7 { double a; struct struct_hfa_d6 b; };
333248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d7 func_hfa_d7(struct struct_hfa_d7 e);
334248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d7((struct struct_hfa_d7){ 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } });
335248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
336248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d8 { double a; struct struct_hfa_d7 b; };
337248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d8 func_hfa_d8(struct struct_hfa_d8 e);
338248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d8((struct struct_hfa_d8){ 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } });
339248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
340248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d9 { double a; struct struct_hfa_d8 b; };
341248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d9 func_hfa_d9(struct struct_hfa_d9 e);
342248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d9((struct struct_hfa_d9){ 9, { 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } } });
343248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
344248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d10 { double a; struct struct_hfa_d9 b; };
345248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d10 func_hfa_d10(struct struct_hfa_d10 e);
346248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d10((struct struct_hfa_d10){ 10, { 9, { 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } } } });
347248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
348248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d11 { double a; struct struct_hfa_d10 b; };
349248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d11 func_hfa_d11(struct struct_hfa_d11 e);
350248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d11((struct struct_hfa_d11){ 11, { 10, { 9, { 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } } } } });
351248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
352248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d12 { double a; struct struct_hfa_d11 b; };
353248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  struct struct_hfa_d12 func_hfa_d12(struct struct_hfa_d12 e);
354248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata  func_hfa_d12((struct struct_hfa_d12){ 12, { 11, { 10, { 9, { 8, { 7, { 6, { 5, { 4, { 3, { 1, { 2 } } } } } } } } } } } });
355248db7bc5d3e095da23b64f9afb0643ca64977efPetr Machata
3566fa27c330f9e07c5be553614b9c6e2f08461780fSteve Fink  return 0;
357b2c254573fbf30189293be6b7f2ef307c499704cSteve Fink}
358