staging: rtl8192u: remove redundant assignment to pointer crypt
[linux/fpc-iii.git] / tools / testing / selftests / bpf / progs / btf_dump_test_case_syntax.c
blobd4a02fe44a1269f34d5677347669f2a08817db1a
1 // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
3 /*
4 * BTF-to-C dumper test for majority of C syntax quirks.
6 * Copyright (c) 2019 Facebook
7 */
8 /* ----- START-EXPECTED-OUTPUT ----- */
9 enum e1 {
10 A = 0,
11 B = 1,
14 enum e2 {
15 C = 100,
16 D = -100,
17 E = 0,
20 typedef enum e2 e2_t;
22 typedef enum {
23 F = 0,
24 G = 1,
25 H = 2,
26 } e3_t;
28 typedef int int_t;
30 typedef volatile const int * volatile const crazy_ptr_t;
32 typedef int *****we_need_to_go_deeper_ptr_t;
34 typedef volatile const we_need_to_go_deeper_ptr_t * restrict * volatile * const * restrict volatile * restrict const * volatile const * restrict volatile const how_about_this_ptr_t;
36 typedef int *ptr_arr_t[10];
38 typedef void (*fn_ptr1_t)(int);
40 typedef void (*printf_fn_t)(const char *, ...);
42 /* ------ END-EXPECTED-OUTPUT ------ */
44 * While previous function pointers are pretty trivial (C-syntax-level
45 * trivial), the following are deciphered here for future generations:
47 * - `fn_ptr2_t`: function, taking anonymous struct as a first arg and pointer
48 * to a function, that takes int and returns int, as a second arg; returning
49 * a pointer to a const pointer to a char. Equivalent to:
50 * typedef struct { int a; } s_t;
51 * typedef int (*fn_t)(int);
52 * typedef char * const * (*fn_ptr2_t)(s_t, fn_t);
54 * - `fn_complext_t`: pointer to a function returning struct and accepting
55 * union and struct. All structs and enum are anonymous and defined inline.
57 * - `signal_t: pointer to a function accepting a pointer to a function as an
58 * argument and returning pointer to a function as a result. Sane equivalent:
59 * typedef void (*signal_handler_t)(int);
60 * typedef signal_handler_t (*signal_ptr_t)(int, signal_handler_t);
62 * - fn_ptr_arr1_t: array of pointers to a function accepting pointer to
63 * a pointer to an int and returning pointer to a char. Easy.
65 * - fn_ptr_arr2_t: array of const pointers to a function taking no arguments
66 * and returning a const pointer to a function, that takes pointer to a
67 * `int -> char *` function and returns pointer to a char. Equivalent:
68 * typedef char * (*fn_input_t)(int);
69 * typedef char * (*fn_output_outer_t)(fn_input_t);
70 * typedef const fn_output_outer_t (* fn_output_inner_t)();
71 * typedef const fn_output_inner_t fn_ptr_arr2_t[5];
73 /* ----- START-EXPECTED-OUTPUT ----- */
74 typedef char * const * (*fn_ptr2_t)(struct {
75 int a;
76 }, int (*)(int));
78 typedef struct {
79 int a;
80 void (*b)(int, struct {
81 int c;
82 }, union {
83 char d;
84 int e[5];
85 });
86 } (*fn_complex_t)(union {
87 void *f;
88 char g[16];
89 }, struct {
90 int h;
91 });
93 typedef void (* (*signal_t)(int, void (*)(int)))(int);
95 typedef char * (*fn_ptr_arr1_t[10])(int **);
97 typedef char * (* const (* const fn_ptr_arr2_t[5])())(char * (*)(int));
99 struct struct_w_typedefs {
100 int_t a;
101 crazy_ptr_t b;
102 we_need_to_go_deeper_ptr_t c;
103 how_about_this_ptr_t d;
104 ptr_arr_t e;
105 fn_ptr1_t f;
106 printf_fn_t g;
107 fn_ptr2_t h;
108 fn_complex_t i;
109 signal_t j;
110 fn_ptr_arr1_t k;
111 fn_ptr_arr2_t l;
114 typedef struct {
115 int x;
116 int y;
117 int z;
118 } anon_struct_t;
120 struct struct_fwd;
122 typedef struct struct_fwd struct_fwd_t;
124 typedef struct struct_fwd *struct_fwd_ptr_t;
126 union union_fwd;
128 typedef union union_fwd union_fwd_t;
130 typedef union union_fwd *union_fwd_ptr_t;
132 struct struct_empty {};
134 struct struct_simple {
135 int a;
136 char b;
137 const int_t *p;
138 struct struct_empty s;
139 enum e2 e;
140 enum {
141 ANON_VAL1 = 1,
142 ANON_VAL2 = 2,
143 } f;
144 int arr1[13];
145 enum e2 arr2[5];
148 union union_empty {};
150 union union_simple {
151 void *ptr;
152 int num;
153 int_t num2;
154 union union_empty u;
157 struct struct_in_struct {
158 struct struct_simple simple;
159 union union_simple also_simple;
160 struct {
161 int a;
162 } not_so_hard_as_well;
163 union {
164 int b;
165 int c;
166 } anon_union_is_good;
167 struct {
168 int d;
169 int e;
171 union {
172 int f;
173 int g;
177 struct struct_with_embedded_stuff {
178 int a;
179 struct {
180 int b;
181 struct {
182 struct struct_with_embedded_stuff *c;
183 const char *d;
184 } e;
185 union {
186 volatile long int f;
187 void * restrict g;
190 union {
191 const int_t *h;
192 void (*i)(char, int, void *);
193 } j;
194 enum {
195 K = 100,
196 L = 200,
197 } m;
198 char n[16];
199 struct {
200 char o;
201 int p;
202 void (*q)(int);
203 } r[5];
204 struct struct_in_struct s[10];
205 int t[11];
208 struct root_struct {
209 enum e1 _1;
210 enum e2 _2;
211 e2_t _2_1;
212 e3_t _2_2;
213 struct struct_w_typedefs _3;
214 anon_struct_t _7;
215 struct struct_fwd *_8;
216 struct_fwd_t *_9;
217 struct_fwd_ptr_t _10;
218 union union_fwd *_11;
219 union_fwd_t *_12;
220 union_fwd_ptr_t _13;
221 struct struct_with_embedded_stuff _14;
224 /* ------ END-EXPECTED-OUTPUT ------ */
226 int f(struct root_struct *s)
228 return 0;