// RUN: %clang_cc1 -std=c++2a -fsyntax-only -verify %s

namespace std {
constexpr bool is_constant_evaluated() noexcept {
  return __builtin_is_constant_evaluated();
}
} // namespace std

constexpr int fn1() {
  if constexpr (std::is_constant_evaluated()) // expected-warning {{'std::is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
    return 0;
  else
    return 1;
}

constexpr int fn2() {
  if constexpr (!std::is_constant_evaluated()) // expected-warning {{'std::is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
    return 0;
  else
    return 1;
}

constexpr int fn3() {
  if constexpr (std::is_constant_evaluated() == false) // expected-warning {{'std::is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
    return 0;
  else
    return 1;
}

constexpr int fn4() {
  if constexpr (__builtin_is_constant_evaluated() == true) // expected-warning {{'__builtin_is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
    return 0;
  else
    return 1;
}

constexpr int fn5() {
  if constexpr (__builtin_is_constant_evaluated()) // expected-warning {{'__builtin_is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
    return 0;
  else
    return 1;
}

constexpr int nowarn1() {
  if (std::is_constant_evaluated())
    return 0;
  else
    return 1;
}

constexpr int nowarn2() {
  if (!__builtin_is_constant_evaluated())
    return 0;
  else
    return 1;
}
