1 // PR c++/90947 - Simple lookup table of array of strings is miscompiled
2 // Verify that initializers for arrays of elements of a class type with
3 // "unusual" data members are correctly recognized as non-zero.
4 // { dg-do compile }
5 // { dg-options "-O1 -fdump-tree-optimized" }
6 
7 struct S
8 {
9   const char *p;
10   static int i;
11   enum { e };
12   typedef int X;
13   int: 1, b:1;
14   union {
15     int c;
16   };
17   const char *q;
18 };
19 
f(void)20 void f (void)
21 {
22   const struct S a[2] =
23     {
24      { /* .p = */ "", /* .b = */ 0, /* .c = */ 0, /* .q = */ "" },
25      { /* .p = */ "", /* .b = */ 0, /* .c = */ 0, /* .q = */ "" }
26     };
27 
28   if (!a[0].p || *a[0].p || !a[0].q || *a[0].q
29       || !a[1].p || *a[1].p || !a[1].q || *a[1].q)
30     __builtin_abort ();
31 }
32 
33 // { dg-final { scan-tree-dump-not "abort" "optimized" } }
34