1 /* Tests for the "Initializer entry defined twice" warning. */
   2 
   3 /* Initializing a struct field twice should trigger the warning. */
   4 struct normal {
   5         int field1;
   6         int field2;
   7 };
   8 
   9 static struct normal struct_error = {
  10         .field1 = 0,
  11         .field1 = 0
  12 };
  13 
  14 /* Initializing two different fields of a union should trigger the warning. */
  15 struct has_union {
  16         int x;
  17         union {
  18                 int a;
  19                 int b;
  20         } y;
  21         int z;
  22 };
  23 
  24 static struct has_union union_error = {
  25         .y = {
  26                 .a = 0,
  27                 .b = 0
  28         }
  29 };
  30 
  31 /* Empty structures can make two fields have the same offset in a struct.
  32  * Initializing both should not trigger the warning. */
  33 struct empty { };
  34 
  35 struct same_offset {
  36         struct empty field1;
  37         int field2;
  38 };
  39 
  40 static struct same_offset not_an_error = {
  41         .field1 = { },
  42         .field2 = 0
  43 };
  44 
  45 /*
  46  * _Bools generally take a whole byte, so ensure that we can initialize
  47  * them without spewing a warning.
  48  */
  49 static _Bool boolarray[3] = {
  50         [0] = 1,
  51         [1] = 1,
  52 };
  53 
  54 /*
  55  * check-name: Initializer entry defined twice
  56  *
  57  * check-error-start
  58 initializer-entry-defined-twice.c:10:10: warning: Initializer entry defined twice
  59 initializer-entry-defined-twice.c:11:10:   also defined here
  60 initializer-entry-defined-twice.c:26:18: warning: Initializer entry defined twice
  61 initializer-entry-defined-twice.c:27:18:   also defined here
  62  * check-error-end
  63  */