From 6e089f8b100bb5c118879cf6e1ca935cb89fa259 Mon Sep 17 00:00:00 2001 From: Eric Fiselier Date: Mon, 16 Jul 2018 20:01:59 +0000 Subject: [PATCH] Fix PR38160 - init_priority attribute not supported by GCC on Apple. This patch guards the use of __attribute__((init_priority(101))) within memory_resource.cpp when building with compilers that don't support it. Specifically GCC on Apple platforms, and MSVC. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@337205 91177308-0d34-0410-b5e6-96231b3b80d8 --- src/experimental/memory_resource.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/experimental/memory_resource.cpp b/src/experimental/memory_resource.cpp index a6eca3743..a3b64cc8b 100644 --- a/src/experimental/memory_resource.cpp +++ b/src/experimental/memory_resource.cpp @@ -68,12 +68,23 @@ union ResourceInitHelper { _LIBCPP_CONSTEXPR_AFTER_CXX11 ResourceInitHelper() : resources() {} ~ResourceInitHelper() {} }; + +// Detect if the init_priority attribute is supported. +#if (defined(_LIBCPP_COMPILER_GCC) && defined(__APPLE__)) \ + || defined(_LIBCPP_COMPILER_MSVC) +// GCC on Apple doesn't support the init priority attribute, +// and MSVC doesn't support any GCC attributes. +# define _LIBCPP_INIT_PRIORITY_MAX +#else +# define _LIBCPP_INIT_PRIORITY_MAX __attribute__((init_priority(101))) +#endif + // When compiled in C++14 this initialization should be a constant expression. // Only in C++11 is "init_priority" needed to ensure initialization order. #if _LIBCPP_STD_VER > 11 _LIBCPP_SAFE_STATIC #endif -ResourceInitHelper res_init __attribute__((init_priority (101))); +ResourceInitHelper res_init _LIBCPP_INIT_PRIORITY_MAX; } // end namespace