libcxx: Move #include_next <math.h> out of header guard in wrapper header.

Code on Windows expects to be able to do:

 #define _USE_MATH_DEFINES
 #include <math.h>

and receive the definitions of mathematical constants, even if <math.h>
has previously been included. To support this scenario, re-include
<math.h> every time the wrapper header is included.

Differential Revision: https://reviews.llvm.org/D42403

llvm-svn: 323490
This commit is contained in:
Peter Collingbourne 2018-01-26 01:19:23 +00:00
parent c0e9bee781
commit 0aa71a4f86
2 changed files with 33 additions and 2 deletions

View File

@ -8,6 +8,16 @@
//
//===----------------------------------------------------------------------===//
// 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
@ -298,8 +308,6 @@ 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

View File

@ -0,0 +1,23 @@
//===----------------------------------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// RUN: %compile -fsyntax-only
#ifdef _MSC_VER
#include <math.h>
#define _USE_MATH_DEFINES
#include <math.h>
#ifndef M_PI
#error M_PI not defined
#endif
#endif