aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp2a/constexpr-new4.C
blob: 4be1bf041fa48aa7e49de2abec770fe8bec770bf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// P0784R7
// { dg-do compile { target c++20 } }
// { dg-additional-options "-fdelete-null-pointer-checks" }

struct S
{
  constexpr S () : s (0) { s++; }
  constexpr S (int x) : s (x) { s += 2; }
  constexpr ~S () { if (s != 35) asm (""); s = 5; }
  int s;
};

constexpr bool
foo ()
{
  S *p = new S (7);
  if (p->s != 9) return false;
  p->s = 35;
  delete p;
  p = new S[3] { 11, 13, 15 };
  if (p[0].s != 13 || p[1].s != 15 || p[2].s != 17) return false;
  p[0].s = 35;
  p[2].s = 35;
  p[1].s = 35;
  delete[] p;
  return true;
}

constexpr bool a = foo ();
static_assert (a);