mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-17 08:16:47 +00:00
[libc++] Use the no_destroy attribute to avoid destroying debug DB statics
Summary: Otherwise, we can run into problems when the program has static variables that need to use the debug database during their deinitialization, if the debug DB has already been deinitialized. Reviewers: EricWF Subscribers: christof, jkorous, dexonsmith, libcxx-commits Tags: #libc Differential Revision: https://reviews.llvm.org/D60830 llvm-svn: 358602
This commit is contained in:
parent
05a358cdcd
commit
81875a67b0
@ -1120,6 +1120,12 @@ template <unsigned> struct __static_assert_check {};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __has_attribute(no_destroy)
|
||||
# define _LIBCPP_NO_DESTROY __attribute__((__no_destroy__))
|
||||
#else
|
||||
# define _LIBCPP_NO_DESTROY
|
||||
#endif
|
||||
|
||||
#ifndef _LIBCPP_HAS_NO_ASAN
|
||||
_LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
|
||||
const void *, const void *, const void *, const void *);
|
||||
|
@ -42,7 +42,7 @@ _LIBCPP_FUNC_VIS
|
||||
__libcpp_db*
|
||||
__get_db()
|
||||
{
|
||||
static __libcpp_db db;
|
||||
static _LIBCPP_NO_DESTROY __libcpp_db db;
|
||||
return &db;
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ typedef lock_guard<mutex_type> RLock;
|
||||
mutex_type&
|
||||
mut()
|
||||
{
|
||||
static mutex_type m;
|
||||
static _LIBCPP_NO_DESTROY mutex_type m;
|
||||
return m;
|
||||
}
|
||||
#endif // !_LIBCPP_HAS_NO_THREADS
|
||||
|
Loading…
x
Reference in New Issue
Block a user