1typedef union
2{
3  struct {int a; int b;} s;
4  double d;
5} T;
6
7int h (T *);
8T g (T);
9
10#if COMPILER != 1
11h (T *x)
12{
13  if (x->s.a != 0 || x->s.b != 1)
14    abort ();
15}
16#endif
17
18#if COMPILER != 2
19T
20g (T x)
21{
22  if (x.s.a != 13 || x.s.b != 47)
23    abort ();
24  x.s.a = 0;
25  x.s.b = 1;
26  h (&x);
27  return x;
28}
29#endif
30
31#if COMPILER != 1
32f ()
33{
34  T x;
35  x.s.a = 13;
36  x.s.b = 47;
37  g (x);
38  if (x.s.a != 13 || x.s.b != 47)
39    abort ();
40  x = g (x);
41  if (x.s.a != 0 || x.s.b != 1)
42    abort ();
43}
44#endif
45
46#if COMPILER != 2
47main ()
48{
49  f ();
50  exit (0);
51}
52#endif
53