// P1938R3
// { dg-do compile { target c++20 } }
// { dg-options "" }

constexpr bool f()
{
  if consteval (true) {}	// { dg-error "'if consteval' requires compound statement" }
				// { dg-error "expected" "" { target *-*-* } .-1 }
				// { dg-warning "'if consteval' only available with" "" { target c++20_only } .-2 }
  if not consteval (false) {}	// { dg-error "'if consteval' requires compound statement" }
				// { dg-error "expected" "" { target *-*-* } .-1 }
				// { dg-warning "'if consteval' only available with" "" { target c++20_only } .-2 }
  if consteval if (true) {}	// { dg-error "'if consteval' requires compound statement" }
				// { dg-warning "'if consteval' only available with" "" { target c++20_only } .-1 }
  if ! consteval {} else ;	// { dg-error "'if consteval' requires compound statement" }
				// { dg-warning "'if consteval' only available with" "" { target c++20_only } .-1 }
  if consteval {} else if (true) {}	// { dg-error "'if consteval' requires compound statement" }
				// { dg-warning "'if consteval' only available with" "" { target c++20_only } .-1 }
  if (true)
    if consteval		// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
      {
      }
    else ;			// { dg-error "'if consteval' requires compound statement" }
  return false;
}

consteval int foo (int x) { return x; }
consteval int bar () { return 2; }

constexpr int
baz (int x)
{
  int r = 0;
  if not consteval	// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += foo (x);	// { dg-error "'x' is not a constant expression" }
    }
  else
    {
      r += bar ();
    }
  if consteval		// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += 2 * bar ();
    }
  else
    {
      r += foo (8 * x);	// { dg-error "'x' is not a constant expression" }
    }
  if ! consteval	// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += foo (32 * x);// { dg-error "'x' is not a constant expression" }
    }
  if consteval		// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += 32 * bar ();
    }
  return r;
}

template <typename T>
constexpr int
qux (int x)
{
  int r = 0;
  if not consteval	// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += foo (x);	// { dg-error "'x' is not a constant expression" }
    }
  else
    {
      r += bar ();
    }
  if consteval		// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += 2 * bar ();
    }
  else
    {
      r += foo (8 * x);	// { dg-error "is not a constant expression" }
    }
  if ! consteval	// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += foo (32 * x);// { dg-error "is not a constant expression" }
    }
  if consteval		// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += 32 * bar ();
    }
  return r;
}

template <typename T>
constexpr T
corge (T x)
{
  T r = 0;
  if not consteval	// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += foo (x);	// { dg-error "'x' is not a constant expression" }
    }
  else
    {
      r += bar ();
    }
  if consteval		// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += 2 * bar ();
    }
  else
    {
      r += foo (8 * x);	// { dg-error "is not a constant expression" }
    }
  if ! consteval	// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += foo (32 * x);// { dg-error "is not a constant expression" }
    }
  if consteval		// { dg-warning "'if consteval' only available with" "" { target c++20_only } }
    {
      r += 32 * bar ();
    }
  return r;
}

int
garply (int x)
{
  return corge (x);
}
