1*2d2a3ad8SAndrii Nakryiko // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
2*2d2a3ad8SAndrii Nakryiko 
3*2d2a3ad8SAndrii Nakryiko /*
4*2d2a3ad8SAndrii Nakryiko  * BTF-to-C dumper test for topological sorting of dependent structs.
5*2d2a3ad8SAndrii Nakryiko  *
6*2d2a3ad8SAndrii Nakryiko  * Copyright (c) 2019 Facebook
7*2d2a3ad8SAndrii Nakryiko  */
8*2d2a3ad8SAndrii Nakryiko /* ----- START-EXPECTED-OUTPUT ----- */
9*2d2a3ad8SAndrii Nakryiko struct s1 {};
10*2d2a3ad8SAndrii Nakryiko 
11*2d2a3ad8SAndrii Nakryiko struct s3;
12*2d2a3ad8SAndrii Nakryiko 
13*2d2a3ad8SAndrii Nakryiko struct s4;
14*2d2a3ad8SAndrii Nakryiko 
15*2d2a3ad8SAndrii Nakryiko struct s2 {
16*2d2a3ad8SAndrii Nakryiko 	struct s2 *s2;
17*2d2a3ad8SAndrii Nakryiko 	struct s3 *s3;
18*2d2a3ad8SAndrii Nakryiko 	struct s4 *s4;
19*2d2a3ad8SAndrii Nakryiko };
20*2d2a3ad8SAndrii Nakryiko 
21*2d2a3ad8SAndrii Nakryiko struct s3 {
22*2d2a3ad8SAndrii Nakryiko 	struct s1 s1;
23*2d2a3ad8SAndrii Nakryiko 	struct s2 s2;
24*2d2a3ad8SAndrii Nakryiko };
25*2d2a3ad8SAndrii Nakryiko 
26*2d2a3ad8SAndrii Nakryiko struct s4 {
27*2d2a3ad8SAndrii Nakryiko 	struct s1 s1;
28*2d2a3ad8SAndrii Nakryiko 	struct s3 s3;
29*2d2a3ad8SAndrii Nakryiko };
30*2d2a3ad8SAndrii Nakryiko 
31*2d2a3ad8SAndrii Nakryiko struct list_head {
32*2d2a3ad8SAndrii Nakryiko 	struct list_head *next;
33*2d2a3ad8SAndrii Nakryiko 	struct list_head *prev;
34*2d2a3ad8SAndrii Nakryiko };
35*2d2a3ad8SAndrii Nakryiko 
36*2d2a3ad8SAndrii Nakryiko struct hlist_node {
37*2d2a3ad8SAndrii Nakryiko 	struct hlist_node *next;
38*2d2a3ad8SAndrii Nakryiko 	struct hlist_node **pprev;
39*2d2a3ad8SAndrii Nakryiko };
40*2d2a3ad8SAndrii Nakryiko 
41*2d2a3ad8SAndrii Nakryiko struct hlist_head {
42*2d2a3ad8SAndrii Nakryiko 	struct hlist_node *first;
43*2d2a3ad8SAndrii Nakryiko };
44*2d2a3ad8SAndrii Nakryiko 
45*2d2a3ad8SAndrii Nakryiko struct callback_head {
46*2d2a3ad8SAndrii Nakryiko 	struct callback_head *next;
47*2d2a3ad8SAndrii Nakryiko 	void (*func)(struct callback_head *);
48*2d2a3ad8SAndrii Nakryiko };
49*2d2a3ad8SAndrii Nakryiko 
50*2d2a3ad8SAndrii Nakryiko struct root_struct {
51*2d2a3ad8SAndrii Nakryiko 	struct s4 s4;
52*2d2a3ad8SAndrii Nakryiko 	struct list_head l;
53*2d2a3ad8SAndrii Nakryiko 	struct hlist_node n;
54*2d2a3ad8SAndrii Nakryiko 	struct hlist_head h;
55*2d2a3ad8SAndrii Nakryiko 	struct callback_head cb;
56*2d2a3ad8SAndrii Nakryiko };
57*2d2a3ad8SAndrii Nakryiko 
58*2d2a3ad8SAndrii Nakryiko /*------ END-EXPECTED-OUTPUT ------ */
59*2d2a3ad8SAndrii Nakryiko 
f(struct root_struct * root)60*2d2a3ad8SAndrii Nakryiko int f(struct root_struct *root)
61*2d2a3ad8SAndrii Nakryiko {
62*2d2a3ad8SAndrii Nakryiko 	return 0;
63*2d2a3ad8SAndrii Nakryiko }
64