1 // PR c++/70001
2 // { dg-do compile { target c++14 } }
3 
4 struct B
5 {
6   int a;
BB7   constexpr B () : a (0) { }
BB8   constexpr B (int x) : a (x) { }
9 };
10 struct C
11 {
12   B c;
CC13   constexpr C () : c (0) { }
14 };
15 struct A
16 {
17   B b[1 << 4];
18 };
19 struct D
20 {
21   C d[1 << 4];
22 };
23 
24 constexpr int
foo(int a,int b)25 foo (int a, int b)
26 {
27   A c;
28   c.b[a].a += b;
29   c.b[b].a += a;
30   return c.b[0].a + c.b[a].a + c.b[b].a;
31 }
32 
33 constexpr int
bar(int a,int b)34 bar (int a, int b)
35 {
36   D c;
37   c.d[a].c.a += b;
38   c.d[b].c.a += a;
39   return c.d[0].c.a + c.d[a].c.a + c.d[b].c.a;
40 }
41 
42 constexpr int d = foo (1, 2);
43 constexpr int e = foo (0, 3);
44 constexpr int f = foo (2, 4);
45 constexpr int g = bar (1, 2);
46 constexpr int h = bar (0, 3);
47 constexpr int i = bar (2, 4);
48 static_assert (d == 3 && e == 6 && f == 6, "");
49 static_assert (g == 3 && h == 6 && i == 6, "");
50