1 #include <stdarg.h>
2 #include <stdbool.h>
3 #include <stdint.h>
4 #include <stdlib.h>
5 
6 enum C
7 #ifdef __cplusplus
8   : uint32_t
9 #endif // __cplusplus
10  {
11   X = 2,
12   Y,
13 };
14 #ifndef __cplusplus
15 typedef uint32_t C;
16 #endif // __cplusplus
17 
18 typedef struct A {
19   int32_t m0;
20 } A;
21 
22 typedef struct B {
23   int32_t x;
24   float y;
25 } B;
26 
27 enum F_Tag
28 #ifdef __cplusplus
29   : uint8_t
30 #endif // __cplusplus
31  {
32   Foo,
33   Bar,
34   Baz,
35 };
36 #ifndef __cplusplus
37 typedef uint8_t F_Tag;
38 #endif // __cplusplus
39 
40 typedef struct Bar_Body {
41   F_Tag tag;
42   uint8_t x;
43   int16_t y;
44 } Bar_Body;
45 
46 typedef union F {
47   F_Tag tag;
48   struct {
49     F_Tag foo_tag;
50     int16_t foo;
51   };
52   Bar_Body bar;
53 } F;
54 
55 enum H_Tag
56 #ifdef __cplusplus
57   : uint8_t
58 #endif // __cplusplus
59  {
60   Hello,
61   There,
62   Everyone,
63 };
64 #ifndef __cplusplus
65 typedef uint8_t H_Tag;
66 #endif // __cplusplus
67 
68 typedef struct There_Body {
69   uint8_t x;
70   int16_t y;
71 } There_Body;
72 
73 typedef struct H {
74   H_Tag tag;
75   union {
76     struct {
77       int16_t hello;
78     };
79     There_Body there;
80   };
81 } H;
82 
83 #ifdef __cplusplus
84 extern "C" {
85 #endif // __cplusplus
86 
87 void root(struct A x, struct B y, C z, union F f, struct H h);
88 
89 #ifdef __cplusplus
90 } // extern "C"
91 #endif // __cplusplus
92