1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // <cfenv> 10 11 #include <cfenv> 12 #include <type_traits> 13 14 #include "test_macros.h" 15 16 #ifndef FE_DIVBYZERO 17 #error FE_DIVBYZERO not defined 18 #endif 19 20 #ifndef FE_INEXACT 21 #error FE_INEXACT not defined 22 #endif 23 24 #ifndef FE_INVALID 25 #error FE_INVALID not defined 26 #endif 27 28 #ifndef FE_OVERFLOW 29 #error FE_OVERFLOW not defined 30 #endif 31 32 #ifndef FE_UNDERFLOW 33 #error FE_UNDERFLOW not defined 34 #endif 35 36 #ifndef FE_ALL_EXCEPT 37 #error FE_ALL_EXCEPT not defined 38 #endif 39 40 #ifndef FE_DOWNWARD 41 #error FE_DOWNWARD not defined 42 #endif 43 44 #ifndef FE_TONEAREST 45 #error FE_TONEAREST not defined 46 #endif 47 48 #ifndef FE_TOWARDZERO 49 #error FE_TOWARDZERO not defined 50 #endif 51 52 #ifndef FE_UPWARD 53 #error FE_UPWARD not defined 54 #endif 55 56 #ifndef FE_DFL_ENV 57 #error FE_DFL_ENV not defined 58 #endif 59 60 int main(int, char**) 61 { 62 std::fenv_t fenv; 63 std::fexcept_t fex; 64 ((void)fenv); // Prevent unused warning 65 ((void)fex); // Prevent unused warning 66 static_assert((std::is_same<decltype(std::feclearexcept(0)), int>::value), ""); 67 static_assert((std::is_same<decltype(std::fegetexceptflag(&fex, 0)), int>::value), ""); 68 static_assert((std::is_same<decltype(std::feraiseexcept(0)), int>::value), ""); 69 static_assert((std::is_same<decltype(std::fesetexceptflag(&fex, 0)), int>::value), ""); 70 static_assert((std::is_same<decltype(std::fetestexcept(0)), int>::value), ""); 71 static_assert((std::is_same<decltype(std::fegetround()), int>::value), ""); 72 static_assert((std::is_same<decltype(std::fesetround(0)), int>::value), ""); 73 static_assert((std::is_same<decltype(std::fegetenv(&fenv)), int>::value), ""); 74 static_assert((std::is_same<decltype(std::feholdexcept(&fenv)), int>::value), ""); 75 static_assert((std::is_same<decltype(std::fesetenv(&fenv)), int>::value), ""); 76 static_assert((std::is_same<decltype(std::feupdateenv(&fenv)), int>::value), ""); 77 78 return 0; 79 } 80