1*b06305e4SDávid Bolvanský // RUN: %clang_cc1 -std=c++2a -fsyntax-only -verify %s
2*b06305e4SDávid Bolvanský 
3*b06305e4SDávid Bolvanský namespace std {
is_constant_evaluated()4*b06305e4SDávid Bolvanský constexpr bool is_constant_evaluated() noexcept {
5*b06305e4SDávid Bolvanský   return __builtin_is_constant_evaluated();
6*b06305e4SDávid Bolvanský }
7*b06305e4SDávid Bolvanský } // namespace std
8*b06305e4SDávid Bolvanský 
fn1()9*b06305e4SDávid Bolvanský constexpr int fn1() {
10*b06305e4SDávid Bolvanský   if constexpr (std::is_constant_evaluated()) // expected-warning {{'std::is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
11*b06305e4SDávid Bolvanský     return 0;
12*b06305e4SDávid Bolvanský   else
13*b06305e4SDávid Bolvanský     return 1;
14*b06305e4SDávid Bolvanský }
15*b06305e4SDávid Bolvanský 
fn2()16*b06305e4SDávid Bolvanský constexpr int fn2() {
17*b06305e4SDávid Bolvanský   if constexpr (!std::is_constant_evaluated()) // expected-warning {{'std::is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
18*b06305e4SDávid Bolvanský     return 0;
19*b06305e4SDávid Bolvanský   else
20*b06305e4SDávid Bolvanský     return 1;
21*b06305e4SDávid Bolvanský }
22*b06305e4SDávid Bolvanský 
fn3()23*b06305e4SDávid Bolvanský constexpr int fn3() {
24*b06305e4SDávid Bolvanský   if constexpr (std::is_constant_evaluated() == false) // expected-warning {{'std::is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
25*b06305e4SDávid Bolvanský     return 0;
26*b06305e4SDávid Bolvanský   else
27*b06305e4SDávid Bolvanský     return 1;
28*b06305e4SDávid Bolvanský }
29*b06305e4SDávid Bolvanský 
fn4()30*b06305e4SDávid Bolvanský constexpr int fn4() {
31*b06305e4SDávid Bolvanský   if constexpr (__builtin_is_constant_evaluated() == true) // expected-warning {{'__builtin_is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
32*b06305e4SDávid Bolvanský     return 0;
33*b06305e4SDávid Bolvanský   else
34*b06305e4SDávid Bolvanský     return 1;
35*b06305e4SDávid Bolvanský }
36*b06305e4SDávid Bolvanský 
fn5()37*b06305e4SDávid Bolvanský constexpr int fn5() {
38*b06305e4SDávid Bolvanský   if constexpr (__builtin_is_constant_evaluated()) // expected-warning {{'__builtin_is_constant_evaluated' will always evaluate to 'true' in a manifestly constant-evaluated expression}}
39*b06305e4SDávid Bolvanský     return 0;
40*b06305e4SDávid Bolvanský   else
41*b06305e4SDávid Bolvanský     return 1;
42*b06305e4SDávid Bolvanský }
43*b06305e4SDávid Bolvanský 
nowarn1()44*b06305e4SDávid Bolvanský constexpr int nowarn1() {
45*b06305e4SDávid Bolvanský   if (std::is_constant_evaluated())
46*b06305e4SDávid Bolvanský     return 0;
47*b06305e4SDávid Bolvanský   else
48*b06305e4SDávid Bolvanský     return 1;
49*b06305e4SDávid Bolvanský }
50*b06305e4SDávid Bolvanský 
nowarn2()51*b06305e4SDávid Bolvanský constexpr int nowarn2() {
52*b06305e4SDávid Bolvanský   if (!__builtin_is_constant_evaluated())
53*b06305e4SDávid Bolvanský     return 0;
54*b06305e4SDávid Bolvanský   else
55*b06305e4SDávid Bolvanský     return 1;
56*b06305e4SDávid Bolvanský }
57