summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/include/__bit_reference2
-rw-r--r--libcxx/include/__config99
-rw-r--r--libcxx/include/__functional_032
-rw-r--r--libcxx/include/__functional_base2
-rw-r--r--libcxx/include/__hash_table2
-rw-r--r--libcxx/include/__locale2
-rw-r--r--libcxx/include/__mutex_base2
-rw-r--r--libcxx/include/__split_buffer2
-rw-r--r--libcxx/include/__sso_allocator2
-rw-r--r--libcxx/include/__std_stream2
-rw-r--r--libcxx/include/__tree2
-rw-r--r--libcxx/include/__tuple2
-rw-r--r--libcxx/include/__tuple_032
-rw-r--r--libcxx/include/algorithm2
-rw-r--r--libcxx/include/array2
-rw-r--r--libcxx/include/atomic2
-rw-r--r--libcxx/include/bitset2
-rw-r--r--libcxx/include/cassert2
-rw-r--r--libcxx/include/ccomplex2
-rw-r--r--libcxx/include/cctype2
-rw-r--r--libcxx/include/cerrno2
-rw-r--r--libcxx/include/cfenv2
-rw-r--r--libcxx/include/cfloat2
-rw-r--r--libcxx/include/chrono2
-rw-r--r--libcxx/include/cinttypes2
-rw-r--r--libcxx/include/ciso6462
-rw-r--r--libcxx/include/climits2
-rw-r--r--libcxx/include/clocale2
-rw-r--r--libcxx/include/cmath2
-rw-r--r--libcxx/include/codecvt2
-rw-r--r--libcxx/include/complex2
-rw-r--r--libcxx/include/complex.h2
-rw-r--r--libcxx/include/condition_variable2
-rw-r--r--libcxx/include/csetjmp2
-rw-r--r--libcxx/include/csignal2
-rw-r--r--libcxx/include/cstdarg2
-rw-r--r--libcxx/include/cstdbool2
-rw-r--r--libcxx/include/cstddef2
-rw-r--r--libcxx/include/cstdint2
-rw-r--r--libcxx/include/cstdio2
-rw-r--r--libcxx/include/cstdlib2
-rw-r--r--libcxx/include/cstring2
-rw-r--r--libcxx/include/ctgmath2
-rw-r--r--libcxx/include/ctime2
-rw-r--r--libcxx/include/cwchar2
-rw-r--r--libcxx/include/cwctype2
-rw-r--r--libcxx/include/deque2
-rw-r--r--libcxx/include/exception2
-rw-r--r--libcxx/include/forward_list2
-rw-r--r--libcxx/include/fstream2
-rw-r--r--libcxx/include/functional2
-rw-r--r--libcxx/include/future2
-rw-r--r--libcxx/include/initializer_list2
-rw-r--r--libcxx/include/iomanip2
-rw-r--r--libcxx/include/ios2
-rw-r--r--libcxx/include/iosfwd2
-rw-r--r--libcxx/include/iostream2
-rw-r--r--libcxx/include/istream2
-rw-r--r--libcxx/include/iterator2
-rw-r--r--libcxx/include/limits2
-rw-r--r--libcxx/include/list2
-rw-r--r--libcxx/include/locale2
-rw-r--r--libcxx/include/map2
-rw-r--r--libcxx/include/memory2
-rw-r--r--libcxx/include/mutex2
-rw-r--r--libcxx/include/new2
-rw-r--r--libcxx/include/numeric2
-rw-r--r--libcxx/include/ostream2
-rw-r--r--libcxx/include/queue2
-rw-r--r--libcxx/include/random2
-rw-r--r--libcxx/include/ratio2
-rw-r--r--libcxx/include/regex2
-rw-r--r--libcxx/include/scoped_allocator2
-rw-r--r--libcxx/include/set2
-rw-r--r--libcxx/include/sstream2
-rw-r--r--libcxx/include/stack2
-rw-r--r--libcxx/include/stdexcept2
-rw-r--r--libcxx/include/streambuf2
-rw-r--r--libcxx/include/string2
-rw-r--r--libcxx/include/strstream2
-rw-r--r--libcxx/include/system_error2
-rw-r--r--libcxx/include/tgmath.h2
-rw-r--r--libcxx/include/thread2
-rw-r--r--libcxx/include/tuple2
-rw-r--r--libcxx/include/type_traits15
-rw-r--r--libcxx/include/typeindex2
-rw-r--r--libcxx/include/typeinfo2
-rw-r--r--libcxx/include/unordered_map2
-rw-r--r--libcxx/include/unordered_set2
-rw-r--r--libcxx/include/utility2
-rw-r--r--libcxx/include/valarray2
-rw-r--r--libcxx/include/vector2
-rw-r--r--libcxx/www/results.Windows.html32
93 files changed, 286 insertions, 40 deletions
diff --git a/libcxx/include/__bit_reference b/libcxx/include/__bit_reference
index 53d3c8604be..fa381bb43cb 100644
--- a/libcxx/include/__bit_reference
+++ b/libcxx/include/__bit_reference
@@ -14,7 +14,9 @@
#include <__config>
#include <algorithm>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/__config b/libcxx/include/__config
index a6f81dbc243..35a16636c83 100644
--- a/libcxx/include/__config
+++ b/libcxx/include/__config
@@ -11,7 +11,9 @@
#ifndef _LIBCPP_CONFIG
#define _LIBCPP_CONFIG
+#if !_MSC_VER // explicit macro necessary because it is only defined below in this file
#pragma GCC system_header
+#endif
#define _LIBCPP_VERSION 1001
@@ -69,17 +71,45 @@
# endif
#endif // !defined(_LIBCPP_LITTLE_ENDIAN) || !defined(_LIBCPP_BIG_ENDIAN)
-#ifndef _LIBCPP_VISIBILITY_TAG
-#define _LIBCPP_VISIBILITY_TAG 1
+#if _WIN32
+
+// only really useful for a DLL
+#ifdef _LIBCPP_DLL // this should be a compiler builtin define ideally...
+# ifdef cxx_EXPORTS
+# define _LIBCPP_HIDDEN
+# define _LIBCPP_VISIBLE __declspec(dllexport)
+# else
+# define _LIBCPP_HIDDEN
+# define _LIBCPP_VISIBLE __declspec(dllimport)
+# endif
+#else
+# define _LIBCPP_HIDDEN
+# define _LIBCPP_VISIBLE
+#endif
+
+#ifndef _LIBCPP_INLINE_VISIBILITY
+#define _LIBCPP_INLINE_VISIBILITY __forceinline
+#endif
+
+#ifndef _LIBCPP_EXCEPTION_ABI
+#define _LIBCPP_EXCEPTION_ABI _LIBCPP_VISIBLE
#endif
-#if _LIBCPP_VISIBILITY_TAG
+#ifndef _LIBCPP_ALWAYS_INLINE
+# if _MSC_VER
+# define _LIBCPP_ALWAYS_INLINE __forceinline
+# endif
+#endif
+
+#endif // _WIN32
+
+#ifndef _LIBCPP_HIDDEN
#define _LIBCPP_HIDDEN __attribute__ ((__visibility__("hidden")))
+#endif
+
+#ifndef _LIBCPP_VISIBLE
#define _LIBCPP_VISIBLE __attribute__ ((__visibility__("default")))
-#else // _LIBCPP_VISIBILITY_TAG
-#define _LIBCPP_HIDDEN
-#define _LIBCPP_VISIBLE
-#endif // _LIBCPP_VISIBILITY_TAG
+#endif
#ifndef _LIBCPP_INLINE_VISIBILITY
#define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__))
@@ -89,12 +119,22 @@
#define _LIBCPP_EXCEPTION_ABI __attribute__ ((__visibility__("default")))
#endif
+#ifndef _LIBCPP_CANTTHROW
#define _LIBCPP_CANTTHROW __attribute__ ((__nothrow__))
+#endif
+#ifndef _LIBCPP_ALWAYS_INLINE
#define _LIBCPP_ALWAYS_INLINE __attribute__ ((__visibility__("hidden"), __always_inline__))
+#endif
#if defined(__clang__)
+#if __has_feature(cxx_alignas)
+# define _ALIGNAS(x) alignas(x)
+#else
+# define _ALIGNAS(x) __attribute__((__aligned__(x)))
+#endif
+
#if !__has_feature(cxx_alias_templates)
#define _LIBCPP_HAS_NO_TEMPLATE_ALIASES
#endif
@@ -181,16 +221,6 @@ typedef __char32_t char32_t;
#define _LIBCPP_HAS_OBJC_ARC_WEAK
#endif
-// Inline namespaces are available in Clang regardless of C++ dialect.
-#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
-#define _LIBCPP_END_NAMESPACE_STD } }
-#define _VSTD std::_LIBCPP_NAMESPACE
-
-namespace std {
- inline namespace _LIBCPP_NAMESPACE {
- }
-}
-
#if !(__has_feature(cxx_constexpr))
#define _LIBCPP_HAS_NO_CONSTEXPR
#endif
@@ -207,10 +237,20 @@ namespace std {
# define _LIBCXX_UNDERLYING_TYPE(T) __underlying_type(T)
#endif
-// end defined(__clang__)
+// Inline namespaces are available in Clang regardless of C++ dialect.
+#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {inline namespace _LIBCPP_NAMESPACE {
+#define _LIBCPP_END_NAMESPACE_STD } }
+#define _VSTD std::_LIBCPP_NAMESPACE
+
+namespace std {
+ inline namespace _LIBCPP_NAMESPACE {
+ }
+}
#elif defined(__GNUC__)
+#define _ALIGNAS(x) __attribute__((__aligned__(x)))
+
#define _ATTRIBUTE(x) __attribute__((x))
#if !__EXCEPTIONS
@@ -275,7 +315,28 @@ namespace _LIBCPP_NAMESPACE {
using namespace _LIBCPP_NAMESPACE __attribute__((__strong__));
}
-#endif // defined(__GNUC__)
+#elif defined(_MSC_VER)
+
+#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
+#define _LIBCPP_HAS_NO_CONSTEXPR
+#define _LIBCPP_HAS_NO_UNICODE_CHARS
+#define _LIBCPP_HAS_NO_DELETED_FUNCTIONS
+#define __alignof__ __alignof
+#define _ATTRIBUTE __declspec
+#define _ALIGNAS(x) __declspec(align(x))
+#define _LIBCPP_HAS_NO_VARIADICS
+
+#define _NOEXCEPT throw()
+#define _NOEXCEPT_(x)
+
+#define _LIBCPP_BEGIN_NAMESPACE_STD namespace std {
+#define _LIBCPP_END_NAMESPACE_STD }
+#define _VSTD std
+
+namespace std {
+}
+
+#endif // __clang__ || __GNUC___ || _MSC_VER
#ifdef _LIBCPP_HAS_NO_UNICODE_CHARS
typedef unsigned short char16_t;
diff --git a/libcxx/include/__functional_03 b/libcxx/include/__functional_03
index e48bb6856de..5d30ce2b750 100644
--- a/libcxx/include/__functional_03
+++ b/libcxx/include/__functional_03
@@ -13,7 +13,9 @@
// manual variadic expansion for <functional>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
template <class _Tp>
class __mem_fn
diff --git a/libcxx/include/__functional_base b/libcxx/include/__functional_base
index 441ab4f5d0b..8d8e4b5e6e9 100644
--- a/libcxx/include/__functional_base
+++ b/libcxx/include/__functional_base
@@ -16,7 +16,9 @@
#include <typeinfo>
#include <exception>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/__hash_table b/libcxx/include/__hash_table
index f9578fa2d2d..4399caad658 100644
--- a/libcxx/include/__hash_table
+++ b/libcxx/include/__hash_table
@@ -18,7 +18,9 @@
#include <algorithm>
#include <cmath>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/__locale b/libcxx/include/__locale
index a161af90f72..28cb3ef6529 100644
--- a/libcxx/include/__locale
+++ b/libcxx/include/__locale
@@ -25,7 +25,9 @@
# include <xlocale.h>
#endif // _WIN32 || __GLIBC__ || __APPLE__ || __FreeBSD_
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/__mutex_base b/libcxx/include/__mutex_base
index 9e472fcc267..55687659a03 100644
--- a/libcxx/include/__mutex_base
+++ b/libcxx/include/__mutex_base
@@ -16,7 +16,9 @@
#include <system_error>
#include <pthread.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#ifdef _LIBCPP_SHARED_LOCK
diff --git a/libcxx/include/__split_buffer b/libcxx/include/__split_buffer
index d5b8f0a3ee2..33ce42da31a 100644
--- a/libcxx/include/__split_buffer
+++ b/libcxx/include/__split_buffer
@@ -6,7 +6,9 @@
#include <type_traits>
#include <algorithm>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/__sso_allocator b/libcxx/include/__sso_allocator
index d25fc484d38..16354d83cc5 100644
--- a/libcxx/include/__sso_allocator
+++ b/libcxx/include/__sso_allocator
@@ -15,7 +15,9 @@
#include <type_traits>
#include <new>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/__std_stream b/libcxx/include/__std_stream
index 6ab0fd6077d..6df6556da76 100644
--- a/libcxx/include/__std_stream
+++ b/libcxx/include/__std_stream
@@ -17,7 +17,9 @@
#include <__locale>
#include <cstdio>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/__tree b/libcxx/include/__tree
index 6c4b6e60ae7..ad5d2f4b8ea 100644
--- a/libcxx/include/__tree
+++ b/libcxx/include/__tree
@@ -17,7 +17,9 @@
#include <stdexcept>
#include <algorithm>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/__tuple b/libcxx/include/__tuple
index 918656ed838..15193b4d107 100644
--- a/libcxx/include/__tuple
+++ b/libcxx/include/__tuple
@@ -15,7 +15,9 @@
#include <cstddef>
#include <type_traits>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#ifdef _LIBCPP_HAS_NO_VARIADICS
diff --git a/libcxx/include/__tuple_03 b/libcxx/include/__tuple_03
index 61049191cb2..a28ac0800ae 100644
--- a/libcxx/include/__tuple_03
+++ b/libcxx/include/__tuple_03
@@ -13,7 +13,9 @@
#include <__config>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/algorithm b/libcxx/include/algorithm
index d6906a209e8..3a47b8d6c38 100644
--- a/libcxx/include/algorithm
+++ b/libcxx/include/algorithm
@@ -595,7 +595,9 @@ template <class BidirectionalIterator, class Compare>
#include <iterator>
#include <cstdlib>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/array b/libcxx/include/array
index 3ac4c55b9d2..c11f4bd74f5 100644
--- a/libcxx/include/array
+++ b/libcxx/include/array
@@ -111,7 +111,9 @@ template <int I, class T, size_t N> T&& get(array<T, N>&&) noexcept;
#include <cassert>
#endif
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/atomic b/libcxx/include/atomic
index 31385a23d17..244f42d0aaf 100644
--- a/libcxx/include/atomic
+++ b/libcxx/include/atomic
@@ -526,7 +526,9 @@ void atomic_signal_fence(memory_order m);
#include <cstdint>
#include <type_traits>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/bitset b/libcxx/include/bitset
index 4d9efd9391b..c970f329071 100644
--- a/libcxx/include/bitset
+++ b/libcxx/include/bitset
@@ -113,7 +113,9 @@ template <size_t N> struct hash<std::bitset<N>>;
*/
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#include <__config>
#include <__bit_reference>
diff --git a/libcxx/include/cassert b/libcxx/include/cassert
index 7337b16ee64..3775990640a 100644
--- a/libcxx/include/cassert
+++ b/libcxx/include/cassert
@@ -20,4 +20,6 @@ Macros:
#include <__config>
#include <assert.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
diff --git a/libcxx/include/ccomplex b/libcxx/include/ccomplex
index 0e999a92d1f..6ed116445e6 100644
--- a/libcxx/include/ccomplex
+++ b/libcxx/include/ccomplex
@@ -20,7 +20,9 @@
#include <complex>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
// hh 080623 Created
diff --git a/libcxx/include/cctype b/libcxx/include/cctype
index dbdc3e765e5..5ef32a48b5f 100644
--- a/libcxx/include/cctype
+++ b/libcxx/include/cctype
@@ -38,7 +38,9 @@ int toupper(int c);
#include <__config>
#include <ctype.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cerrno b/libcxx/include/cerrno
index 71084a14ac5..9804e4e3dcf 100644
--- a/libcxx/include/cerrno
+++ b/libcxx/include/cerrno
@@ -26,7 +26,9 @@ Macros:
#include <__config>
#include <errno.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#if !defined(EOWNERDEAD) || !defined(ENOTRECOVERABLE)
diff --git a/libcxx/include/cfenv b/libcxx/include/cfenv
index cd86b882325..dd7db37f8e4 100644
--- a/libcxx/include/cfenv
+++ b/libcxx/include/cfenv
@@ -56,7 +56,9 @@ int feupdateenv(const fenv_t* envp);
#include <__config>
#include <fenv.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cfloat b/libcxx/include/cfloat
index f0079c23fa2..5fa56550fa6 100644
--- a/libcxx/include/cfloat
+++ b/libcxx/include/cfloat
@@ -63,7 +63,9 @@ Macros:
#include <__config>
#include <float.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#ifndef FLT_EVAL_METHOD
#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__
diff --git a/libcxx/include/chrono b/libcxx/include/chrono
index a6cd1945bff..1c79f4bbe80 100644
--- a/libcxx/include/chrono
+++ b/libcxx/include/chrono
@@ -255,7 +255,9 @@ typedef steady_clock high_resolution_clock;
#include <ratio>
#include <limits>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cinttypes b/libcxx/include/cinttypes
index ddf20e89614..786692b8fec 100644
--- a/libcxx/include/cinttypes
+++ b/libcxx/include/cinttypes
@@ -239,7 +239,9 @@ uintmax_t wcstoumax(const wchar_t* restrict nptr, wchar_t** restrict endptr, int
#include <cstdint>
#include <inttypes.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/ciso646 b/libcxx/include/ciso646
index 38b3e942a83..b2efc72a9aa 100644
--- a/libcxx/include/ciso646
+++ b/libcxx/include/ciso646
@@ -18,6 +18,8 @@
#include <__config>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#endif // _LIBCPP_CISO646
diff --git a/libcxx/include/climits b/libcxx/include/climits
index c82becdc056..81ffecdf6ee 100644
--- a/libcxx/include/climits
+++ b/libcxx/include/climits
@@ -41,6 +41,8 @@ Macros:
#include <__config>
#include <limits.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#endif // _LIBCPP_CLIMITS
diff --git a/libcxx/include/clocale b/libcxx/include/clocale
index 6982f84e9cf..f8b8f0dd34b 100644
--- a/libcxx/include/clocale
+++ b/libcxx/include/clocale
@@ -38,7 +38,9 @@ lconv* localeconv();
#include <__config>
#include <locale.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cmath b/libcxx/include/cmath
index f8bc0dfc66a..bc3151ba3e0 100644
--- a/libcxx/include/cmath
+++ b/libcxx/include/cmath
@@ -301,7 +301,9 @@ long double truncl(long double x);
#include <math.h>
#include <type_traits>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
// signbit
diff --git a/libcxx/include/codecvt b/libcxx/include/codecvt
index 86fdc727e43..6c44e343474 100644
--- a/libcxx/include/codecvt
+++ b/libcxx/include/codecvt
@@ -55,7 +55,9 @@ class codecvt_utf8_utf16
#include <__config>
#include <__locale>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/complex b/libcxx/include/complex
index f91b240488b..e7f63eac3a1 100644
--- a/libcxx/include/complex
+++ b/libcxx/include/complex
@@ -249,7 +249,9 @@ template<class T, class charT, class traits>
#include <cassert>
#endif
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/complex.h b/libcxx/include/complex.h
index e04b2e3e881..7003d31a89c 100644
--- a/libcxx/include/complex.h
+++ b/libcxx/include/complex.h
@@ -28,6 +28,8 @@
#endif // __cplusplus
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#endif // _LIBCPP_COMPLEX_H
diff --git a/libcxx/include/condition_variable b/libcxx/include/condition_variable
index fc3ac3dff5c..b4da556f635 100644
--- a/libcxx/include/condition_variable
+++ b/libcxx/include/condition_variable
@@ -111,7 +111,9 @@ public:
#include <__mutex_base>
#include <memory>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/csetjmp b/libcxx/include/csetjmp
index 2b8b81f9d4b..d0b2c078967 100644
--- a/libcxx/include/csetjmp
+++ b/libcxx/include/csetjmp
@@ -34,7 +34,9 @@ void longjmp(jmp_buf env, int val);
#include <__config>
#include <setjmp.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#ifndef setjmp
#define setjmp(env) setjmp(env)
diff --git a/libcxx/include/csignal b/libcxx/include/csignal
index 93adc59928f..97282661872 100644
--- a/libcxx/include/csignal
+++ b/libcxx/include/csignal
@@ -43,7 +43,9 @@ int raise(int sig);
#include <__config>
#include <signal.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cstdarg b/libcxx/include/cstdarg
index dbd73cb3baf..c8b6999242f 100644
--- a/libcxx/include/cstdarg
+++ b/libcxx/include/cstdarg
@@ -35,7 +35,9 @@ Types:
#include <__config>
#include <stdarg.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cstdbool b/libcxx/include/cstdbool
index 76761fb3195..2c764a61f21 100644
--- a/libcxx/include/cstdbool
+++ b/libcxx/include/cstdbool
@@ -22,7 +22,9 @@ Macros:
#include <__config>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#undef __bool_true_false_are_defined
#define __bool_true_false_are_defined 1
diff --git a/libcxx/include/cstddef b/libcxx/include/cstddef
index b851ea00926..48317ba0063 100644
--- a/libcxx/include/cstddef
+++ b/libcxx/include/cstddef
@@ -43,7 +43,9 @@ Types:
#include <stddef.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cstdint b/libcxx/include/cstdint
index 0ded1f16844..7a187d3ebf2 100644
--- a/libcxx/include/cstdint
+++ b/libcxx/include/cstdint
@@ -144,7 +144,9 @@ Types:
#include <__config>
#include <stdint.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cstdio b/libcxx/include/cstdio
index 9af0ed5e366..aa891742ea1 100644
--- a/libcxx/include/cstdio
+++ b/libcxx/include/cstdio
@@ -99,7 +99,9 @@ void perror(const char* s);
#include <__config>
#include <stdio.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cstdlib b/libcxx/include/cstdlib
index 26c27ffd201..e8726cf6fce 100644
--- a/libcxx/include/cstdlib
+++ b/libcxx/include/cstdlib
@@ -82,7 +82,9 @@ size_t wcstombs(char* restrict s, const wchar_t* restrict pwcs, size_t n);
#include <__config>
#include <stdlib.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cstring b/libcxx/include/cstring
index 6d2e507c4d8..1a230559bd2 100644
--- a/libcxx/include/cstring
+++ b/libcxx/include/cstring
@@ -60,7 +60,9 @@ size_t strlen(const char* s);
#include <__config>
#include <string.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/ctgmath b/libcxx/include/ctgmath
index 9044c6ad887..535eb7dccd1 100644
--- a/libcxx/include/ctgmath
+++ b/libcxx/include/ctgmath
@@ -22,6 +22,8 @@
#include <ccomplex>
#include <cmath>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#endif // _LIBCPP_CTGMATH
diff --git a/libcxx/include/ctime b/libcxx/include/ctime
index 2cef9585cec..fc4eb26f543 100644
--- a/libcxx/include/ctime
+++ b/libcxx/include/ctime
@@ -47,7 +47,9 @@ size_t strftime(char* restrict s, size_t maxsize, const char* restrict format,
#include <__config>
#include <time.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cwchar b/libcxx/include/cwchar
index 0a67fe8bba9..6fe485229f6 100644
--- a/libcxx/include/cwchar
+++ b/libcxx/include/cwchar
@@ -110,7 +110,9 @@ size_t wcsrtombs(char* restrict dst, const wchar_t** restrict src, size_t len,
#include <support/win32/support.h> // pull in *swprintf defines
#endif // _WIN32
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/cwctype b/libcxx/include/cwctype
index f2f4470a95f..4f89b52db27 100644
--- a/libcxx/include/cwctype
+++ b/libcxx/include/cwctype
@@ -54,7 +54,9 @@ wctrans_t wctrans(const char* property);
#include <cctype>
#include <wctype.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/deque b/libcxx/include/deque
index 87cbe599359..ab9ba58b028 100644
--- a/libcxx/include/deque
+++ b/libcxx/include/deque
@@ -150,7 +150,9 @@ template <class T, class Allocator>
*/
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#include <__config>
#include <__split_buffer>
diff --git a/libcxx/include/exception b/libcxx/include/exception
index f418575c735..0a747f50fb3 100644
--- a/libcxx/include/exception
+++ b/libcxx/include/exception
@@ -80,7 +80,9 @@ template <class E> void rethrow_if_nested(const E& e);
#include <cstddef>
#include <type_traits>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
namespace std // purposefully not using versioning namespace
{
diff --git a/libcxx/include/forward_list b/libcxx/include/forward_list
index 0dd6bb241b0..61fe290d9e2 100644
--- a/libcxx/include/forward_list
+++ b/libcxx/include/forward_list
@@ -174,7 +174,9 @@ template <class T, class Allocator>
#include <iterator>
#include <algorithm>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/fstream b/libcxx/include/fstream
index 7034aab110a..b6a2ab0e158 100644
--- a/libcxx/include/fstream
+++ b/libcxx/include/fstream
@@ -171,7 +171,9 @@ typedef basic_fstream<wchar_t> wfstream;
#include <__locale>
#include <cstdio>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/functional b/libcxx/include/functional
index 6db7ac48e92..59b132c4515 100644
--- a/libcxx/include/functional
+++ b/libcxx/include/functional
@@ -467,7 +467,9 @@ POLICY: For non-variadic implementations, the number of arguments is limited
#include <__functional_base>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/future b/libcxx/include/future
index 62529d97c75..f6896a3a0fc 100644
--- a/libcxx/include/future
+++ b/libcxx/include/future
@@ -370,7 +370,9 @@ template <class R, class Alloc> struct uses_allocator<packaged_task<R>, Alloc>;
#include <mutex>
#include <thread>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/initializer_list b/libcxx/include/initializer_list
index 745d3bd787f..3263906d637 100644
--- a/libcxx/include/initializer_list
+++ b/libcxx/include/initializer_list
@@ -46,7 +46,9 @@ template<class E> const E* end(initializer_list<E> il) noexcept;
#include <__config>
#include <cstddef>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
namespace std // purposefully not versioned
{
diff --git a/libcxx/include/iomanip b/libcxx/include/iomanip
index a407360ff0e..15704046227 100644
--- a/libcxx/include/iomanip
+++ b/libcxx/include/iomanip
@@ -33,7 +33,9 @@ template <class charT> T10 put_time(const struct tm* tmb, const charT* fmt);
#include <__config>
#include <istream>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/ios b/libcxx/include/ios
index e2f2b6fd4d5..7ea63a31ca7 100644
--- a/libcxx/include/ios
+++ b/libcxx/include/ios
@@ -216,7 +216,9 @@ storage-class-specifier const error_category& iostream_category;
#include <__locale>
#include <system_error>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/iosfwd b/libcxx/include/iosfwd
index 852d9e5f3e8..7e5ac7321f5 100644
--- a/libcxx/include/iosfwd
+++ b/libcxx/include/iosfwd
@@ -89,7 +89,9 @@ typedef fpos<char_traits<wchar_t>::state_type> wstreampos;
#include <__config>
#include <wchar.h> // for mbstate_t
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/iostream b/libcxx/include/iostream
index e828b54fa89..53cd146cc59 100644
--- a/libcxx/include/iostream
+++ b/libcxx/include/iostream
@@ -40,7 +40,9 @@ extern wostream wclog;
#include <istream>
#include <ostream>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/istream b/libcxx/include/istream
index d2d37768e52..24d9f3a9f63 100644
--- a/libcxx/include/istream
+++ b/libcxx/include/istream
@@ -155,7 +155,9 @@ template <class charT, class traits, class T>
#include <__config>
#include <ostream>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/iterator b/libcxx/include/iterator
index 97ff78722cf..d62743856b0 100644
--- a/libcxx/include/iterator
+++ b/libcxx/include/iterator
@@ -321,7 +321,9 @@ template <class T, size_t N> T* end(T (&array)[N]);
#include <cassert>
#endif
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/limits b/libcxx/include/limits
index 989964e0a6a..5f31c4fdfec 100644
--- a/libcxx/include/limits
+++ b/libcxx/include/limits
@@ -102,7 +102,9 @@ template<> class numeric_limits<cv long double>;
*/
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#include <__config>
#include <type_traits>
diff --git a/libcxx/include/list b/libcxx/include/list
index f2ffcc852e3..345f24dbbe4 100644
--- a/libcxx/include/list
+++ b/libcxx/include/list
@@ -176,7 +176,9 @@ template <class T, class Alloc>
#include <iterator>
#include <algorithm>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/locale b/libcxx/include/locale
index aa99ff7e858..b2afbd40e07 100644
--- a/libcxx/include/locale
+++ b/libcxx/include/locale
@@ -192,7 +192,9 @@ template <class charT> class messages_byname;
#include <nl_types.h>
#endif // !_WIN32
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/map b/libcxx/include/map
index 886aecf2c9f..8bb75550dba 100644
--- a/libcxx/include/map
+++ b/libcxx/include/map
@@ -375,7 +375,9 @@ swap(multimap<Key, T, Compare, Allocator>& x,
#include <functional>
#include <initializer_list>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/memory b/libcxx/include/memory
index 467d2928909..878dda8730d 100644
--- a/libcxx/include/memory
+++ b/libcxx/include/memory
@@ -600,7 +600,9 @@ void* align(size_t alignment, size_t size, void*& ptr, size_t& space);
#include <cassert>
#endif
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/mutex b/libcxx/include/mutex
index 297baca5257..37e74d6d575 100644
--- a/libcxx/include/mutex
+++ b/libcxx/include/mutex
@@ -179,7 +179,9 @@ template<class Callable, class ...Args>
#include <tuple>
#endif
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/new b/libcxx/include/new
index 81c16bdfc97..5bcbad0cd04 100644
--- a/libcxx/include/new
+++ b/libcxx/include/new
@@ -56,7 +56,9 @@ void operator delete[](void* ptr, void*) noexcept;
#include <exception>
#include <cstddef>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
namespace std // purposefully not using versioning namespace
{
diff --git a/libcxx/include/numeric b/libcxx/include/numeric
index 31493990aef..4ca62e8eb64 100644
--- a/libcxx/include/numeric
+++ b/libcxx/include/numeric
@@ -60,7 +60,9 @@ template <class ForwardIterator, class T>
#include <__config>
#include <iterator>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/ostream b/libcxx/include/ostream
index f1a3de9c6df..53064961ca9 100644
--- a/libcxx/include/ostream
+++ b/libcxx/include/ostream
@@ -133,7 +133,9 @@ template <class charT, class traits, class T>
#include <iterator>
#include <bitset>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/queue b/libcxx/include/queue
index bed5bb7af1b..e05ab8f8b0f 100644
--- a/libcxx/include/queue
+++ b/libcxx/include/queue
@@ -171,7 +171,9 @@ template <class T, class Container, class Compare>
#include <functional>
#include <algorithm>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/random b/libcxx/include/random
index 0e0860e7398..c5c33c0fb32 100644
--- a/libcxx/include/random
+++ b/libcxx/include/random
@@ -1646,7 +1646,9 @@ class piecewise_linear_distribution
#include <ostream>
#include <cmath>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/ratio b/libcxx/include/ratio
index 9764014a1e3..4ef66c5bf19 100644
--- a/libcxx/include/ratio
+++ b/libcxx/include/ratio
@@ -70,7 +70,9 @@ typedef ratio<1000000000000000000000000, 1> yotta; // not supported
#include <climits>
#include <type_traits>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/regex b/libcxx/include/regex
index 760f4eb94dd..048fbefc9e9 100644
--- a/libcxx/include/regex
+++ b/libcxx/include/regex
@@ -732,7 +732,9 @@ typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
#include <vector>
#include <deque>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/scoped_allocator b/libcxx/include/scoped_allocator
index 9427a376d88..cd051020f61 100644
--- a/libcxx/include/scoped_allocator
+++ b/libcxx/include/scoped_allocator
@@ -106,7 +106,9 @@ template <class OuterA1, class OuterA2, class... InnerAllocs>
#include <__config>
#include <memory>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/set b/libcxx/include/set
index fe3d382768e..36d3dd49b9b 100644
--- a/libcxx/include/set
+++ b/libcxx/include/set
@@ -338,7 +338,9 @@ swap(multiset<Key, Compare, Allocator>& x, multiset<Key, Compare, Allocator>& y)
#include <__tree>
#include <functional>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/sstream b/libcxx/include/sstream
index a2a0d31a8ce..1b27195f901 100644
--- a/libcxx/include/sstream
+++ b/libcxx/include/sstream
@@ -175,7 +175,9 @@ typedef basic_stringstream<wchar_t> wstringstream;
#include <istream>
#include <string>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/stack b/libcxx/include/stack
index 3d72f966928..59906bd89ed 100644
--- a/libcxx/include/stack
+++ b/libcxx/include/stack
@@ -85,7 +85,9 @@ template <class T, class Container>
#include <__config>
#include <deque>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/stdexcept b/libcxx/include/stdexcept
index d31dc8b072c..ef5de595f03 100644
--- a/libcxx/include/stdexcept
+++ b/libcxx/include/stdexcept
@@ -46,7 +46,9 @@ public:
#include <exception>
#include <iosfwd> // for string forward decl
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
namespace std // purposefully not using versioning namespace
{
diff --git a/libcxx/include/streambuf b/libcxx/include/streambuf
index feb62c7e193..5dcb597d96f 100644
--- a/libcxx/include/streambuf
+++ b/libcxx/include/streambuf
@@ -112,7 +112,9 @@ protected:
#include <iosfwd>
#include <ios>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/string b/libcxx/include/string
index 2041510fe50..4e29e8ae166 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -446,7 +446,9 @@ template <> struct hash<wstring>;
#include <cassert>
#endif
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/strstream b/libcxx/include/strstream
index 4ff34a55be4..5eadefd12b9 100644
--- a/libcxx/include/strstream
+++ b/libcxx/include/strstream
@@ -131,7 +131,9 @@ private:
#include <ostream>
#include <istream>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/system_error b/libcxx/include/system_error
index 5e1e6fe4b29..ea96a66c0db 100644
--- a/libcxx/include/system_error
+++ b/libcxx/include/system_error
@@ -223,7 +223,9 @@ template <> struct hash<std::error_code>;
#include <stdexcept>
#include <__functional_base>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/tgmath.h b/libcxx/include/tgmath.h
index 2388b6ee1d2..fbe1e8248d7 100644
--- a/libcxx/include/tgmath.h
+++ b/libcxx/include/tgmath.h
@@ -22,6 +22,8 @@
#include <complex.h>
#include <math.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#endif // _LIBCPP_TGMATH_H
diff --git a/libcxx/include/thread b/libcxx/include/thread
index ce3ca49ef13..4366c41dbc2 100644
--- a/libcxx/include/thread
+++ b/libcxx/include/thread
@@ -100,7 +100,9 @@ void sleep_for(const chrono::duration<Rep, Period>& rel_time);
#endif
#include <pthread.h>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
#define __STDCPP_THREADS__ __cplusplus
diff --git a/libcxx/include/tuple b/libcxx/include/tuple
index b3c5c92efed..cc679296678 100644
--- a/libcxx/include/tuple
+++ b/libcxx/include/tuple
@@ -119,7 +119,9 @@ template <class... Types>
#include <memory>
#include <type_traits>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/type_traits b/libcxx/include/type_traits
index c6a20e24503..95d3a3fcae8 100644
--- a/libcxx/include/type_traits
+++ b/libcxx/include/type_traits
@@ -142,7 +142,9 @@ namespace std
#include <__config>
#include <cstddef>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
@@ -891,12 +893,12 @@ struct _LIBCPP_VISIBLE aligned_storage
#define _CREATE_ALIGNED_STORAGE_SPECIALIZATION(n) \
template <size_t _Len>\
-struct __attribute__ ((__visibility__("default"))) aligned_storage<_Len, n>\
+struct _LIBCPP_VISIBLE aligned_storage<_Len, n>\
{\
- struct type\
+ struct _ALIGNAS(n) type\
{\
unsigned char _[_Len];\
- } __attribute__((__aligned__(n)));\
+ };\
}
_CREATE_ALIGNED_STORAGE_SPECIALIZATION(0x1);
@@ -913,7 +915,10 @@ _CREATE_ALIGNED_STORAGE_SPECIALIZATION(0x400);
_CREATE_ALIGNED_STORAGE_SPECIALIZATION(0x800);
_CREATE_ALIGNED_STORAGE_SPECIALIZATION(0x1000);
_CREATE_ALIGNED_STORAGE_SPECIALIZATION(0x2000);
+// MSDN says that MSVC does not support alignment beyond 8192 (=0x2000)
+#if !defined(_MSC_VER)
_CREATE_ALIGNED_STORAGE_SPECIALIZATION(0x4000);
+#endif // !_MSC_VER
#undef _CREATE_ALIGNED_STORAGE_SPECIALIZATION
@@ -933,7 +938,7 @@ private:
typedef typename __promote<_A2>::type __type2;
typedef typename __promote<_A3>::type __type3;
public:
- typedef __typeof__(__type1() + __type2() + __type3()) type;
+ typedef decltype(__type1() + __type2() + __type3()) type;
};
template <class _A1, class _A2>
@@ -943,7 +948,7 @@ private:
typedef typename __promote<_A1>::type __type1;
typedef typename __promote<_A2>::type __type2;
public:
- typedef __typeof__(__type1() + __type2()) type;
+ typedef decltype(__type1() + __type2()) type;
};
template <class _A1>
diff --git a/libcxx/include/typeindex b/libcxx/include/typeindex
index 7fb1513c906..398b52880e9 100644
--- a/libcxx/include/typeindex
+++ b/libcxx/include/typeindex
@@ -49,7 +49,9 @@ struct hash<type_index>
#include <typeinfo>
#include <__functional_base>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/typeinfo b/libcxx/include/typeinfo
index 310c482c4c5..6ffee0f8a3c 100644
--- a/libcxx/include/typeinfo
+++ b/libcxx/include/typeinfo
@@ -61,7 +61,9 @@ public:
#include <exception>
#include <cstddef>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
namespace std // purposefully not using versioning namespace
{
diff --git a/libcxx/include/unordered_map b/libcxx/include/unordered_map
index cb30fc87d69..56645e09b92 100644
--- a/libcxx/include/unordered_map
+++ b/libcxx/include/unordered_map
@@ -319,7 +319,9 @@ template <class Key, class T, class Hash, class Pred, class Alloc>
#include <functional>
#include <stdexcept>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/unordered_set b/libcxx/include/unordered_set
index d7615fa05c5..279e90723d6 100644
--- a/libcxx/include/unordered_set
+++ b/libcxx/include/unordered_set
@@ -305,7 +305,9 @@ template <class Value, class Hash, class Pred, class Alloc>
#include <__hash_table>
#include <functional>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/utility b/libcxx/include/utility
index 358fe765d9d..dd9ff33d712 100644
--- a/libcxx/include/utility
+++ b/libcxx/include/utility
@@ -125,7 +125,9 @@ template<size_t I, class T1, class T2>
#include <__tuple>
#include <type_traits>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/valarray b/libcxx/include/valarray
index 62c1c66c344..5d3154cc9f8 100644
--- a/libcxx/include/valarray
+++ b/libcxx/include/valarray
@@ -346,7 +346,9 @@ template <class T> unspecified2 end(const valarray<T>& v);
#include <algorithm>
#include <functional>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/include/vector b/libcxx/include/vector
index b334074d0b9..5f47180c4f4 100644
--- a/libcxx/include/vector
+++ b/libcxx/include/vector
@@ -270,7 +270,9 @@ void swap(vector<T,Allocator>& x, vector<T,Allocator>& y)
#include <__split_buffer>
#include <__functional_base>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/libcxx/www/results.Windows.html b/libcxx/www/results.Windows.html
index 0569abcda79..b548ab7c873 100644
--- a/libcxx/www/results.Windows.html
+++ b/libcxx/www/results.Windows.html
@@ -157,7 +157,8 @@ input.output/
copy.pass.cpp: Windows locale names don't follow UNIX convention.
default.pass.cpp: idem.
streambuf.members/
- locales.pass.cpp: Windows locale names don't follow UNIX convention.
+ streambuf.locales/
+ locales.pass.cpp: Windows locale names don't follow UNIX convention.
streambuf.protected/
streambuf.assign/
assign.pass.cpp: Windows locale names don't follow UNIX convention.
@@ -223,21 +224,20 @@ localization/
wchar_t_unshift.pass.cpp: idem.
locale.codecvt.byname/
ctor_wchar_t.pass.cpp: Windows locale names don't follow UNIX convention.
- locale.ctype/
- locale.ctype.byname/
- is_1.pass.cpp: Windows locale names don't follow UNIX convention.
- is_many.pass.cpp: idem.
- narrow_1.pass.cpp: idem.
- narrow_many.pass.cpp: idem.
- scan_is.pass.cpp: idem.
- scan_not.pass.cpp: idem.
- tolower_1.pass.cpp: idem.
- tolower_many.pass.cpp: idem.
- toupper_1.pass.cpp: idem.
- toupper_many.pass.cpp: idem.
- types.pass.cpp: idem.
- widen_1.pass.cpp: idem.
- widen_many.pass.cpp: idem.
+ locale.ctype.byname/
+ is_1.pass.cpp: Windows locale names don't follow UNIX convention.
+ is_many.pass.cpp: idem.
+ narrow_1.pass.cpp: idem.
+ narrow_many.pass.cpp: idem.
+ scan_is.pass.cpp: idem.
+ scan_not.pass.cpp: idem.
+ tolower_1.pass.cpp: idem.
+ tolower_many.pass.cpp: idem.
+ toupper_1.pass.cpp: idem.
+ toupper_many.pass.cpp: idem.
+ types.pass.cpp: idem.
+ widen_1.pass.cpp: idem.
+ widen_many.pass.cpp: idem.
category.monetary/
locale.money.get/
locale.money.get.members/
OpenPOWER on IntegriCloud