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