12d2a3ad8SAndrii Nakryiko // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
22d2a3ad8SAndrii Nakryiko 
32d2a3ad8SAndrii Nakryiko /*
42d2a3ad8SAndrii Nakryiko  * BTF-to-C dumper test validating no name versioning happens between
52d2a3ad8SAndrii Nakryiko  * independent C namespaces (struct/union/enum vs typedef/enum values).
62d2a3ad8SAndrii Nakryiko  *
72d2a3ad8SAndrii Nakryiko  * Copyright (c) 2019 Facebook
82d2a3ad8SAndrii Nakryiko  */
92d2a3ad8SAndrii Nakryiko /* ----- START-EXPECTED-OUTPUT ----- */
102d2a3ad8SAndrii Nakryiko struct S {
112d2a3ad8SAndrii Nakryiko 	int S;
122d2a3ad8SAndrii Nakryiko 	int U;
132d2a3ad8SAndrii Nakryiko };
142d2a3ad8SAndrii Nakryiko 
152d2a3ad8SAndrii Nakryiko typedef struct S S;
162d2a3ad8SAndrii Nakryiko 
172d2a3ad8SAndrii Nakryiko union U {
182d2a3ad8SAndrii Nakryiko 	int S;
192d2a3ad8SAndrii Nakryiko 	int U;
202d2a3ad8SAndrii Nakryiko };
212d2a3ad8SAndrii Nakryiko 
222d2a3ad8SAndrii Nakryiko typedef union U U;
232d2a3ad8SAndrii Nakryiko 
242d2a3ad8SAndrii Nakryiko enum E {
252d2a3ad8SAndrii Nakryiko 	V = 0,
262d2a3ad8SAndrii Nakryiko };
272d2a3ad8SAndrii Nakryiko 
282d2a3ad8SAndrii Nakryiko typedef enum E E;
292d2a3ad8SAndrii Nakryiko 
302d2a3ad8SAndrii Nakryiko struct A {};
312d2a3ad8SAndrii Nakryiko 
322d2a3ad8SAndrii Nakryiko union B {};
332d2a3ad8SAndrii Nakryiko 
342d2a3ad8SAndrii Nakryiko enum C {
352d2a3ad8SAndrii Nakryiko 	A = 1,
362d2a3ad8SAndrii Nakryiko 	B = 2,
372d2a3ad8SAndrii Nakryiko 	C = 3,
382d2a3ad8SAndrii Nakryiko };
392d2a3ad8SAndrii Nakryiko 
402d2a3ad8SAndrii Nakryiko struct X {};
412d2a3ad8SAndrii Nakryiko 
422d2a3ad8SAndrii Nakryiko union Y {};
432d2a3ad8SAndrii Nakryiko 
442d2a3ad8SAndrii Nakryiko enum Z;
452d2a3ad8SAndrii Nakryiko 
462d2a3ad8SAndrii Nakryiko typedef int X;
472d2a3ad8SAndrii Nakryiko 
482d2a3ad8SAndrii Nakryiko typedef int Y;
492d2a3ad8SAndrii Nakryiko 
502d2a3ad8SAndrii Nakryiko typedef int Z;
512d2a3ad8SAndrii Nakryiko 
522d2a3ad8SAndrii Nakryiko /*------ END-EXPECTED-OUTPUT ------ */
532d2a3ad8SAndrii Nakryiko 
f(struct{ struct S _1; S _2; union U _3; U _4; enum E _5; E _6; struct A a; union B b; enum C c; struct X x; union Y y; enum Z *z; X xx; Y yy; Z zz; } * _)542d2a3ad8SAndrii Nakryiko int f(struct {
552d2a3ad8SAndrii Nakryiko 	struct S _1;
562d2a3ad8SAndrii Nakryiko 	S _2;
572d2a3ad8SAndrii Nakryiko 	union U _3;
582d2a3ad8SAndrii Nakryiko 	U _4;
592d2a3ad8SAndrii Nakryiko 	enum E _5;
602d2a3ad8SAndrii Nakryiko 	E _6;
612d2a3ad8SAndrii Nakryiko 	struct A a;
622d2a3ad8SAndrii Nakryiko 	union B b;
632d2a3ad8SAndrii Nakryiko 	enum C c;
642d2a3ad8SAndrii Nakryiko 	struct X x;
652d2a3ad8SAndrii Nakryiko 	union Y y;
662d2a3ad8SAndrii Nakryiko 	enum Z *z;
672d2a3ad8SAndrii Nakryiko 	X xx;
682d2a3ad8SAndrii Nakryiko 	Y yy;
692d2a3ad8SAndrii Nakryiko 	Z zz;
702d2a3ad8SAndrii Nakryiko } *_)
712d2a3ad8SAndrii Nakryiko {
722d2a3ad8SAndrii Nakryiko 	return 0;
732d2a3ad8SAndrii Nakryiko }
74