(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
cpp23/
attr-assume7.C
// P1774R8 - Portable assumptions
// { dg-do compile { target c++11 } }
// { dg-options "-O2" }

int
foo (int x)
{
  [[assume (x == 42)]];
  return x;
}

int
bar (int x)
{
  [[assume (++x == 43)]];
  return x;
}

int
baz (int x)
{
  [[assume (({ int z = ++x; static int w; ++w; if (z == 51) return -1; if (z == 53) goto lab1; if (z == 64) throw 1; z == 43; }))]];
lab1:
  return x;
}

struct S { S (); S (const S &); ~S (); int a, b; int foo (); };

int
qux ()
{
  S s;
  [[assume (s.a == 42 && s.b == 43)]];
  return s.a + s.b;
}

int
S::foo ()
{
  [[assume (a == 42 && b == 43)]];
  return a + b;
}

int
corge (int x)
{
  [[assume (({ [[assume (x < 42)]]; x > -42; }))]];
  return x < 42;
}

int
garply (int x)
{
  [[assume (({ [[assume (++x < 43)]]; x > -42; }))]];
  return x < 42;
}