xref: /aosp_15_r20/external/libcxx/test/libcxx/numerics/c.math/constexpr-fns.pass.cpp (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // Check that the overloads of std::__libcpp_{isnan,isinf,isfinite} that take
11 // floating-point values are evaluatable from constexpr contexts.
12 //
13 // These functions need to be constexpr in order to be called from CUDA, see
14 // https://reviews.llvm.org/D25403.  They don't actually need to be
15 // constexpr-evaluatable, but that's what we check here, since we can't check
16 // true constexpr-ness.
17 //
18 // This fails with gcc because __builtin_isnan and friends, which libcpp_isnan
19 // and friends call, are not themselves constexpr-evaluatable.
20 //
21 // UNSUPPORTED: c++98, c++03
22 // XFAIL: gcc
23 
24 #include <cmath>
25 
26 static_assert(std::__libcpp_isnan_or_builtin(0.) == false, "");
27 static_assert(std::__libcpp_isinf_or_builtin(0.0) == false, "");
28 static_assert(std::__libcpp_isfinite_or_builtin(0.0) == true, "");
29 
main()30 int main()
31 {
32 }
33