// -*- C++ -*-
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

#ifndef _LIBCPP_FENV_H
#define _LIBCPP_FENV_H

/*
    fenv.h synopsis

This entire header is C99 / C++0X

Macros:

    FE_DIVBYZERO
    FE_INEXACT
    FE_INVALID
    FE_OVERFLOW
    FE_UNDERFLOW
    FE_ALL_EXCEPT
    FE_DOWNWARD
    FE_TONEAREST
    FE_TOWARDZERO
    FE_UPWARD
    FE_DFL_ENV

Types:

    fenv_t
    fexcept_t

int feclearexcept(int excepts);
int fegetexceptflag(fexcept_t* flagp, int excepts);
int feraiseexcept(int excepts);
int fesetexceptflag(const fexcept_t* flagp, int excepts);
int fetestexcept(int excepts);
int fegetround();
int fesetround(int round);
int fegetenv(fenv_t* envp);
int feholdexcept(fenv_t* envp);
int fesetenv(const fenv_t* envp);
int feupdateenv(const fenv_t* envp);


*/

#if defined(__cplusplus) && __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
#  include <__cxx03/fenv.h>
#else
#  include <__config>

#  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#    pragma GCC system_header
#  endif

#  if __has_include_next(<fenv.h>)
#    include_next <fenv.h>
#  endif

#  ifdef __cplusplus

extern "C++" {

#    ifdef feclearexcept
#      undef feclearexcept
#    endif

#    ifdef fegetexceptflag
#      undef fegetexceptflag
#    endif

#    ifdef feraiseexcept
#      undef feraiseexcept
#    endif

#    ifdef fesetexceptflag
#      undef fesetexceptflag
#    endif

#    ifdef fetestexcept
#      undef fetestexcept
#    endif

#    ifdef fegetround
#      undef fegetround
#    endif

#    ifdef fesetround
#      undef fesetround
#    endif

#    ifdef fegetenv
#      undef fegetenv
#    endif

#    ifdef feholdexcept
#      undef feholdexcept
#    endif

#    ifdef fesetenv
#      undef fesetenv
#    endif

#    ifdef feupdateenv
#      undef feupdateenv
#    endif

} // extern "C++"

#  endif // defined(__cplusplus)
#endif   // defined(__cplusplus) && __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)

#endif // _LIBCPP_FENV_H
