12d2a3ad8SAndrii Nakryiko // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
22d2a3ad8SAndrii Nakryiko 
32d2a3ad8SAndrii Nakryiko /*
42d2a3ad8SAndrii Nakryiko  * BTF-to-C dumper test for topological sorting of dependent structs.
52d2a3ad8SAndrii Nakryiko  *
62d2a3ad8SAndrii Nakryiko  * Copyright (c) 2019 Facebook
72d2a3ad8SAndrii Nakryiko  */
82d2a3ad8SAndrii Nakryiko /* ----- START-EXPECTED-OUTPUT ----- */
92d2a3ad8SAndrii Nakryiko struct s1 {};
102d2a3ad8SAndrii Nakryiko 
112d2a3ad8SAndrii Nakryiko struct s3;
122d2a3ad8SAndrii Nakryiko 
132d2a3ad8SAndrii Nakryiko struct s4;
142d2a3ad8SAndrii Nakryiko 
152d2a3ad8SAndrii Nakryiko struct s2 {
162d2a3ad8SAndrii Nakryiko 	struct s2 *s2;
172d2a3ad8SAndrii Nakryiko 	struct s3 *s3;
182d2a3ad8SAndrii Nakryiko 	struct s4 *s4;
192d2a3ad8SAndrii Nakryiko };
202d2a3ad8SAndrii Nakryiko 
212d2a3ad8SAndrii Nakryiko struct s3 {
222d2a3ad8SAndrii Nakryiko 	struct s1 s1;
232d2a3ad8SAndrii Nakryiko 	struct s2 s2;
242d2a3ad8SAndrii Nakryiko };
252d2a3ad8SAndrii Nakryiko 
262d2a3ad8SAndrii Nakryiko struct s4 {
272d2a3ad8SAndrii Nakryiko 	struct s1 s1;
282d2a3ad8SAndrii Nakryiko 	struct s3 s3;
292d2a3ad8SAndrii Nakryiko };
302d2a3ad8SAndrii Nakryiko 
312d2a3ad8SAndrii Nakryiko struct list_head {
322d2a3ad8SAndrii Nakryiko 	struct list_head *next;
332d2a3ad8SAndrii Nakryiko 	struct list_head *prev;
342d2a3ad8SAndrii Nakryiko };
352d2a3ad8SAndrii Nakryiko 
362d2a3ad8SAndrii Nakryiko struct hlist_node {
372d2a3ad8SAndrii Nakryiko 	struct hlist_node *next;
382d2a3ad8SAndrii Nakryiko 	struct hlist_node **pprev;
392d2a3ad8SAndrii Nakryiko };
402d2a3ad8SAndrii Nakryiko 
412d2a3ad8SAndrii Nakryiko struct hlist_head {
422d2a3ad8SAndrii Nakryiko 	struct hlist_node *first;
432d2a3ad8SAndrii Nakryiko };
442d2a3ad8SAndrii Nakryiko 
452d2a3ad8SAndrii Nakryiko struct callback_head {
462d2a3ad8SAndrii Nakryiko 	struct callback_head *next;
472d2a3ad8SAndrii Nakryiko 	void (*func)(struct callback_head *);
482d2a3ad8SAndrii Nakryiko };
492d2a3ad8SAndrii Nakryiko 
502d2a3ad8SAndrii Nakryiko struct root_struct {
512d2a3ad8SAndrii Nakryiko 	struct s4 s4;
522d2a3ad8SAndrii Nakryiko 	struct list_head l;
532d2a3ad8SAndrii Nakryiko 	struct hlist_node n;
542d2a3ad8SAndrii Nakryiko 	struct hlist_head h;
552d2a3ad8SAndrii Nakryiko 	struct callback_head cb;
562d2a3ad8SAndrii Nakryiko };
572d2a3ad8SAndrii Nakryiko 
582d2a3ad8SAndrii Nakryiko /*------ END-EXPECTED-OUTPUT ------ */
592d2a3ad8SAndrii Nakryiko 
f(struct root_struct * root)602d2a3ad8SAndrii Nakryiko int f(struct root_struct *root)
612d2a3ad8SAndrii Nakryiko {
622d2a3ad8SAndrii Nakryiko 	return 0;
632d2a3ad8SAndrii Nakryiko }
64