mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-24 03:32:35 +08:00
[libcxx] Do not include the C math.h header before __config
Summary: Certain C libraries require configuration macros defined in __config to provide the correct functionality for libc++. This patch ensures that the C header math.h is always included after the __config header. It also adds a Windows-specific #if guard for the case when the C math.h file is included the second time, as suggested by Marshall in https://reviews.llvm.org/rL323490. Fixes PR36382. Reviewers: mclow.lists, EricWF Reviewed By: mclow.lists Subscribers: cfe-commits, pcc, christof, rogfer01 Differential Revision: https://reviews.llvm.org/D43579 git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@325760 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -8,16 +8,6 @@
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// This include lives outside the header guard in order to support an MSVC
|
||||
// extension which allows users to do:
|
||||
//
|
||||
// #define _USE_MATH_DEFINES
|
||||
// #include <math.h>
|
||||
//
|
||||
// and receive the definitions of mathematical constants, even if <math.h>
|
||||
// has previously been included.
|
||||
#include_next <math.h>
|
||||
|
||||
#ifndef _LIBCPP_MATH_H
|
||||
#define _LIBCPP_MATH_H
|
||||
|
||||
@@ -308,6 +298,8 @@ long double truncl(long double x);
|
||||
#pragma GCC system_header
|
||||
#endif
|
||||
|
||||
#include_next <math.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
// We support including .h headers inside 'extern "C"' contexts, so switch
|
||||
@@ -1494,4 +1486,18 @@ trunc(_A1 __lcpp_x) _NOEXCEPT {return ::trunc((double)__lcpp_x);}
|
||||
|
||||
#endif // __cplusplus
|
||||
|
||||
#else // _LIBCPP_MATH_H
|
||||
|
||||
// This include lives outside the header guard in order to support an MSVC
|
||||
// extension which allows users to do:
|
||||
//
|
||||
// #define _USE_MATH_DEFINES
|
||||
// #include <math.h>
|
||||
//
|
||||
// and receive the definitions of mathematical constants, even if <math.h>
|
||||
// has previously been included.
|
||||
#if defined(_LIBCPP_MSVCRT) && defined(_USE_MATH_DEFINES)
|
||||
#include_next <math.h>
|
||||
#endif
|
||||
|
||||
#endif // _LIBCPP_MATH_H
|
||||
|
||||
Reference in New Issue
Block a user