blob: f2bf6433ceb4e01c197c5a73e5a4580d6d1c09e4 [file] [log] [blame]
Howard Hinnant3e519522010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnant5b08a8a2010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnant3e519522010-05-11 19:42:16 +00004//
Howard Hinnant412dbeb2010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnant3e519522010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
Jonathan Roelofs2f63b502014-12-11 16:17:26 +00009//
10// UNSUPPORTED: newlib
Howard Hinnant3e519522010-05-11 19:42:16 +000011
12// <cfenv>
13
14#include <cfenv>
15#include <type_traits>
16
17#ifndef FE_DIVBYZERO
18#error FE_DIVBYZERO not defined
19#endif
20
21#ifndef FE_INEXACT
22#error FE_INEXACT not defined
23#endif
24
25#ifndef FE_INVALID
26#error FE_INVALID not defined
27#endif
28
29#ifndef FE_OVERFLOW
30#error FE_OVERFLOW not defined
31#endif
32
33#ifndef FE_UNDERFLOW
34#error FE_UNDERFLOW not defined
35#endif
36
37#ifndef FE_ALL_EXCEPT
38#error FE_ALL_EXCEPT not defined
39#endif
40
41#ifndef FE_DOWNWARD
42#error FE_DOWNWARD not defined
43#endif
44
45#ifndef FE_TONEAREST
46#error FE_TONEAREST not defined
47#endif
48
49#ifndef FE_TOWARDZERO
50#error FE_TOWARDZERO not defined
51#endif
52
53#ifndef FE_UPWARD
54#error FE_UPWARD not defined
55#endif
56
57#ifndef FE_DFL_ENV
58#error FE_DFL_ENV not defined
59#endif
60
61int main()
62{
Ed Schouten69722ab2015-03-15 18:36:31 +000063 std::fenv_t fenv;
64 std::fexcept_t fex;
Eric Fiselierfb42f4c2016-05-02 19:15:48 +000065 ((void)fenv); // Prevent unused warning
66 ((void)fex); // Prevent unused warning
Howard Hinnant3e519522010-05-11 19:42:16 +000067 static_assert((std::is_same<decltype(std::feclearexcept(0)), int>::value), "");
68 static_assert((std::is_same<decltype(std::fegetexceptflag(&fex, 0)), int>::value), "");
69 static_assert((std::is_same<decltype(std::feraiseexcept(0)), int>::value), "");
70 static_assert((std::is_same<decltype(std::fesetexceptflag(&fex, 0)), int>::value), "");
71 static_assert((std::is_same<decltype(std::fetestexcept(0)), int>::value), "");
72 static_assert((std::is_same<decltype(std::fegetround()), int>::value), "");
73 static_assert((std::is_same<decltype(std::fesetround(0)), int>::value), "");
74 static_assert((std::is_same<decltype(std::fegetenv(&fenv)), int>::value), "");
75 static_assert((std::is_same<decltype(std::feholdexcept(&fenv)), int>::value), "");
76 static_assert((std::is_same<decltype(std::fesetenv(&fenv)), int>::value), "");
77 static_assert((std::is_same<decltype(std::feupdateenv(&fenv)), int>::value), "");
78}