diff options
| author | Eric Fiselier <eric@efcs.ca> | 2017-05-31 22:07:49 +0000 |
|---|---|---|
| committer | Eric Fiselier <eric@efcs.ca> | 2017-05-31 22:07:49 +0000 |
| commit | a016efb1dcda61e606e527b73791fbacf1bc9c86 (patch) | |
| tree | f98a8a9a31a14d8d72c4d549467288b5dce6e594 /libcxx/include/__undef_macros | |
| parent | 0b69e363f65b9207d42213f546a9e2fa55c503be (diff) | |
| download | bcm5719-llvm-a016efb1dcda61e606e527b73791fbacf1bc9c86.tar.gz bcm5719-llvm-a016efb1dcda61e606e527b73791fbacf1bc9c86.zip | |
[Libc++] Use #pragma push_macro/pop_macro to better handle min/max on Windows
Summary:
This patch improves how libc++ handles min/max macros within the headers. Previously libc++ would undef them and emit a warning.
This patch changes libc++ to use `#pragma push_macro` to save the macro before undefining it, and `#pragma pop_macro` to restore the macros and the end of the header.
Reviewers: mclow.lists, bcraig, compnerd, EricWF
Reviewed By: EricWF
Subscribers: cfe-commits, krytarowski
Differential Revision: https://reviews.llvm.org/D33080
llvm-svn: 304357
Diffstat (limited to 'libcxx/include/__undef_macros')
| -rw-r--r-- | libcxx/include/__undef_macros | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libcxx/include/__undef_macros b/libcxx/include/__undef_macros new file mode 100644 index 00000000000..60ab1dbfb5f --- /dev/null +++ b/libcxx/include/__undef_macros @@ -0,0 +1,34 @@ +// -*- C++ -*- +//===------------------------ __undef_macros ------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + + +#ifdef min +#if !defined(_LIBCPP_DISABLE_MACRO_CONFLICT_WARNINGS) +#if defined(_LIBCPP_WARNING) +_LIBCPP_WARNING("macro min is incompatible with C++. Try #define NOMINMAX " + "before any Windows header. #undefing min") +#else +#warning: macro min is incompatible with C++. #undefing min +#endif +#endif +#undef min +#endif + +#ifdef max +#if !defined(_LIBCPP_DISABLE_MACRO_CONFLICT_WARNINGS) +#if defined(_LIBCPP_WARNING) +_LIBCPP_WARNING("macro max is incompatible with C++. Try #define NOMINMAX " + "before any Windows header. #undefing max") +#else +#warning: macro max is incompatible with C++. #undefing max +#endif +#endif +#undef max +#endif |

