view gcc/testsuite/g++.dg/cpp1y/constexpr-89336-2.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line source

// 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, "");