/* PR tree-optimization/93210 */
/* { dg-do run } */
/* { dg-options "-O2 -fdump-tree-optimized" } */
/* { dg-final { scan-tree-dump-times "(?:return|<retval> =) \[0-9]\[0-9a-fA-FxX]*;" 31 "optimized" } } */

#ifdef __SIZEOF_INT128__
typedef unsigned __int128 L;
#else
typedef unsigned long long L;
#endif
struct S { signed char a, b; unsigned char c; };
struct T { signed char d; struct S e[25]; signed char f; };
union U { struct T g; L h[10]; };
const union U u = { { 1, { { 2, 3, 4 }, { 5, 6, 7 }, { 8, 9, 10 },
                           { 12, 13, 14 }, { 15, 16, 17 }, { 18, 19, 20 },
                           { 22, 23, 24 }, { 25, 26, 27 }, { 28, 29, 30 },
                           { 32, 33, 34 }, { 35, 36, 37 }, { 38, 39, 40 },
                           { 42, 43, 44 }, { 45, 46, 47 }, { 48, 49, 50 },
                           { 52, 53, 54 }, { 55, 56, 57 }, { 58, 59, 60 },
                           { 62, 63, 64 }, { 65, 66, 67 }, { 68, 69, 70 },
                           { 72, 73, 74 }, { 75, 76, 77 }, { 78, 79, 80 },
                           { 82, 83, 84 } }, 85 } };
const union U v = { { 1, { { 2, 3, 4 }, [1 ... 23] = { 5, 6, 7 },
			   { 8, 9, 10 } }, 86 } };
struct A { char a[5]; char b[16]; char c[7]; };
union V { struct A d; unsigned int e[10]; };
const union V w = { { "abcde", "ijkl", "mnopqr" } };
#define N(n) __attribute__((noipa)) L foo##n (void) { return u.h[n]; }
#define M N(0) N(1) N(2) N(3) N(4) N(5) N(6) N(7) N(8) N(9)
M
#undef N
#define N(n) __attribute__((noipa)) L bar##n (void) { return v.h[n]; }
M
#undef N
#define N(n) __attribute__((noipa)) L baz##n (void) { return w.e[n]; }
M

typedef L (*F) (void);
F arr[30] = {
#undef N
#define N(n) foo##n,
M
#undef N
#define N(n) bar##n,
M
#undef N
#define N(n) baz##n,
M
};

int
main ()
{
  const union U *p = &u;
  const union U *q = &v;
  const union V *r = &w;
  __asm ("" : "+g" (p));
  __asm ("" : "+g" (q));
  __asm ("" : "+g" (r));
  for (int i = 0; i < 10; i++)
    if (arr[i] () != p->h[i]
	|| arr[i + 10] () != q->h[i]
	|| arr[i + 20] () != r->e[i])
      __builtin_abort ();
  return 0;
}
