1struct s1 {
2	int x;
3	int y;
4};
5
6struct s2 {
7	int x;
8	int y;
9} __attribute__((designated_init));
10
11struct nest1 {
12	struct s1 s1;
13	struct s2 s2;
14};
15
16struct nest2 {
17	struct s1 s1;
18	struct s2 s2;
19} __attribute__((designated_init));
20
21static struct s1 s1_positional = { 5, 10 };
22static struct s1 s1_designated = { .x = 5, .y = 10 };
23static struct s2 s2_positional = { 5, 10 };
24static struct s2 s2_designated = { .x = 5, .y = 10 };
25static struct nest1 nest1_positional = {
26	{ 5, 10 },
27	{ 5, 10 },
28};
29static struct nest1 nest1_designated_outer = {
30	.s1 = { 5, 10 },
31	.s2 = { 5, 10 },
32};
33static struct nest1 nest1_designated_inner = {
34	{ .x = 5, .y = 10 },
35	{ .x = 5, .y = 10 },
36};
37static struct nest1 nest1_designated_both = {
38	.s1 = { .x = 5, .y = 10 },
39	.s2 = { .x = 5, .y = 10 },
40};
41static struct nest2 nest2_positional = {
42	{ 5, 10 },
43	{ 5, 10 },
44};
45static struct nest2 nest2_designated_outer = {
46	.s1 = { 5, 10 },
47	.s2 = { 5, 10 },
48};
49static struct nest2 nest2_designated_inner = {
50	{ .x = 5, .y = 10 },
51	{ .x = 5, .y = 10 },
52};
53static struct nest2 nest2_designated_both = {
54	.s1 = { .x = 5, .y = 10 },
55	.s2 = { .x = 5, .y = 10 },
56};
57
58static struct {
59	int x;
60	int y;
61} __attribute__((designated_init))
62	anon_positional = { 5, 10 },
63	anon_designated = { .x = 5, .y = 10};
64
65static struct s1 s1_array[] = {
66	{ 5, 10 },
67	{ .x = 5, .y = 10 },
68};
69
70static struct s2 s2_array[] = {
71	{ 5, 10 },
72	{ .x = 5, .y = 10 },
73};
74
75static struct s1 ret_s1_positional(void)
76{
77	return ((struct s1){ 5, 10 });
78}
79
80static struct s1 ret_s1_designated(void)
81{
82	return ((struct s1){ .x = 5, .y = 10 });
83}
84
85static struct s2 ret_s2_positional(void)
86{
87	return ((struct s2){ 5, 10 });
88}
89
90static struct s2 ret_s2_designated(void)
91{
92	return ((struct s2){ .x = 5, .y = 10 });
93}
94
95static struct nest1 ret_nest1_positional(void)
96{
97	return ((struct nest1){
98			{ 5, 10 },
99			{ 5, 10 },
100		});
101}
102
103static struct nest1 ret_nest1_designated_outer(void)
104{
105	return ((struct nest1){
106			.s1 = { 5, 10 },
107			.s2 = { 5, 10 },
108		});
109}
110
111static struct nest1 ret_nest1_designated_inner(void)
112{
113	return ((struct nest1){
114			{ .x = 5, .y = 10 },
115			{ .x = 5, .y = 10 },
116		});
117}
118
119static struct nest1 ret_nest1_designated_both(void)
120{
121	return ((struct nest1){
122			.s1 = { .x = 5, .y = 10 },
123			.s2 = { .x = 5, .y = 10 },
124		});
125}
126
127static struct nest2 ret_nest2_positional(void)
128{
129	return ((struct nest2){
130			{ 5, 10 },
131			{ 5, 10 },
132		});
133}
134
135static struct nest2 ret_nest2_designated_outer(void)
136{
137	return ((struct nest2){
138			.s1 = { 5, 10 },
139			.s2 = { 5, 10 },
140		});
141}
142
143static struct nest2 ret_nest2_designated_inner(void)
144{
145	return ((struct nest2){
146			{ .x = 5, .y = 10 },
147			{ .x = 5, .y = 10 },
148		});
149}
150
151static struct nest2 ret_nest2_designated_both(void)
152{
153	return ((struct nest2){
154			.s1 = { .x = 5, .y = 10 },
155			.s2 = { .x = 5, .y = 10 },
156		});
157}
158/*
159 * check-name: designated_init attribute
160 *
161 * check-error-start
162designated-init.c:23:36: warning: in initializer for s2_positional: positional init of field in struct s2, declared with attribute designated_init
163designated-init.c:23:39: warning: in initializer for s2_positional: positional init of field in struct s2, declared with attribute designated_init
164designated-init.c:27:11: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
165designated-init.c:27:14: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
166designated-init.c:31:17: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
167designated-init.c:31:20: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
168designated-init.c:42:9: warning: in initializer for nest2_positional: positional init of field in struct nest2, declared with attribute designated_init
169designated-init.c:43:9: warning: in initializer for nest2_positional: positional init of field in struct nest2, declared with attribute designated_init
170designated-init.c:43:11: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
171designated-init.c:43:14: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
172designated-init.c:47:17: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
173designated-init.c:47:20: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
174designated-init.c:50:9: warning: in initializer for nest2_designated_inner: positional init of field in struct nest2, declared with attribute designated_init
175designated-init.c:51:9: warning: in initializer for nest2_designated_inner: positional init of field in struct nest2, declared with attribute designated_init
176designated-init.c:62:29: warning: in initializer for anon_positional: positional init of field in struct <noident>, declared with attribute designated_init
177designated-init.c:62:32: warning: in initializer for anon_positional: positional init of field in struct <noident>, declared with attribute designated_init
178designated-init.c:71:11: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
179designated-init.c:71:14: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
180designated-init.c:87:30: warning: positional init of field in struct s2, declared with attribute designated_init
181designated-init.c:87:33: warning: positional init of field in struct s2, declared with attribute designated_init
182designated-init.c:99:27: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
183designated-init.c:99:30: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
184designated-init.c:107:33: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
185designated-init.c:107:36: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
186designated-init.c:130:25: warning: positional init of field in struct nest2, declared with attribute designated_init
187designated-init.c:131:25: warning: positional init of field in struct nest2, declared with attribute designated_init
188designated-init.c:131:27: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
189designated-init.c:131:30: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
190designated-init.c:139:33: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
191designated-init.c:139:36: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
192designated-init.c:146:25: warning: positional init of field in struct nest2, declared with attribute designated_init
193designated-init.c:147:25: warning: positional init of field in struct nest2, declared with attribute designated_init
194 * check-error-end
195 */
196