| // PR c++/89336 |
| // { dg-do compile { target c++14 } } |
| |
| constexpr int |
| foo () |
| { |
| int a[16] = {}; |
| int r = 0; |
| a[15] = a[14] = a[13] = a[12] = a[11] = a[10] = a[9] = a[8] |
| = a[7] = a[6] = a[5] = a[4] = a[3] = a[2] = a[1] = a[0] = 5; |
| for (int i = 0; i < 16; ++i) |
| r += a[i]; |
| return r; |
| } |
| |
| static_assert (foo () == 16 * 5, ""); |
| |
| struct A { int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p; }; |
| |
| constexpr int |
| bar () |
| { |
| A a {}; |
| a.p = a.o = a.n = a.m = a.l = a.k = a.j = a.i |
| = a.h = a.g = a.f = a.e = a.d = a.c = a.b = a.a = 8; |
| return a.a + a.b + a.c + a.d + a.e + a.f + a.g + a.h |
| + a.i + a.j + a.k + a.l + a.m + a.n + a.o + a.p; |
| } |
| |
| static_assert (bar () == 16 * 8, ""); |
| |
| constexpr int |
| baz () |
| { |
| int a[16] = {}; |
| int r = 0; |
| a[0] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] |
| = a[8] = a[9] = a[10] = a[11] = a[12] = a[13] = a[14] = a[15] = 7; |
| for (int i = 0; i < 16; ++i) |
| r += a[i]; |
| return r; |
| } |
| |
| static_assert (baz () == 16 * 7, ""); |
| |
| constexpr int |
| qux () |
| { |
| A a {}; |
| a.a = a.b = a.c = a.d = a.e = a.f = a.g = a.h |
| = a.i = a.j = a.k = a.l = a.m = a.n = a.o = a.p = 6; |
| return a.a + a.b + a.c + a.d + a.e + a.f + a.g + a.h |
| + a.i + a.j + a.k + a.l + a.m + a.n + a.o + a.p; |
| } |
| |
| static_assert (qux () == 16 * 6, ""); |