forked from OSchip/llvm-project
[libc++] Change workaround for init_priority((100)) outside of system headers
We had previously been using a different workaround for pretending that we were inside a system header, however it had some undesirable effects on dependency parsing for build systems, as explained in [1]. This patch changes the workaround to use `#pragma GCC system_header`, which shouldn't suffer from the same issue. Unfortunately, it is a lot more verbose. The issue is that `#pragma GCC system_header` is ignored when we are inside a source file, so we have to create a header just for the sake of using it. IMO this seems like an artificial restriction without much benefit, but investigating that is a different story. For now, this should at least solve build system problems at the cost of some readability. [1]: https://reviews.llvm.org/D95972#3178968 Differential Revision: https://reviews.llvm.org/D115334
This commit is contained in:
parent
206365bf8f
commit
515afe8b13
|
@ -80,9 +80,9 @@ public:
|
|||
GetSystemTimeAsFileTimePtr fp;
|
||||
};
|
||||
|
||||
# 83 "chrono.cpp" 1 3
|
||||
GetSystemTimeInit GetSystemTimeAsFileTimeFunc _LIBCPP_INIT_PRIORITY_MAX;
|
||||
# 85 "chrono.cpp" 2
|
||||
// Pretend we're inside a system header so the compiler doesn't flag the use of the init_priority
|
||||
// attribute with a value that's reserved for the implementation (we're the implementation).
|
||||
#include "chrono_system_time_init.h"
|
||||
} // namespace
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
#pragma GCC system_header
|
||||
GetSystemTimeInit GetSystemTimeAsFileTimeFunc _LIBCPP_INIT_PRIORITY_MAX;
|
|
@ -76,9 +76,9 @@ union ResourceInitHelper {
|
|||
~ResourceInitHelper() {}
|
||||
};
|
||||
|
||||
# 79 "memory_resource.cpp" 1 3
|
||||
_LIBCPP_SAFE_STATIC ResourceInitHelper res_init _LIBCPP_INIT_PRIORITY_MAX;
|
||||
# 81 "memory_resource.cpp" 2
|
||||
// Pretend we're inside a system header so the compiler doesn't flag the use of the init_priority
|
||||
// attribute with a value that's reserved for the implementation (we're the implementation).
|
||||
#include "memory_resource_init_helper.h"
|
||||
|
||||
} // end namespace
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
#pragma GCC system_header
|
||||
_LIBCPP_SAFE_STATIC ResourceInitHelper res_init _LIBCPP_INIT_PRIORITY_MAX;
|
|
@ -85,12 +85,9 @@ __asm__("?wclog@" _LIBCPP_ABI_NAMESPACE_STR "@std@@3V?$basic_ostream@_WU?$char_t
|
|||
;
|
||||
#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
|
||||
|
||||
// Hacky way to make the compiler believe that we're inside a system header so
|
||||
// it doesn't flag the use of the init_priority attribute with a value that's
|
||||
// reserved for the implementation (we're the implementation).
|
||||
# 80 "iostream.cpp" 1 3
|
||||
_LIBCPP_HIDDEN ios_base::Init __start_std_streams _LIBCPP_INIT_PRIORITY_MAX;
|
||||
# 82 "iostream.cpp" 2
|
||||
// Pretend we're inside a system header so the compiler doesn't flag the use of the init_priority
|
||||
// attribute with a value that's reserved for the implementation (we're the implementation).
|
||||
#include "iostream_init.h"
|
||||
|
||||
// On Windows the TLS storage for locales needs to be initialized before we create
|
||||
// the standard streams, otherwise it may not be alive during program termination
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
#pragma GCC system_header
|
||||
_LIBCPP_HIDDEN ios_base::Init __start_std_streams _LIBCPP_INIT_PRIORITY_MAX;
|
Loading…
Reference in New Issue