[libcxx-commits] [PATCH] D60830: [libc++] Use the no_destroy attribute to avoid destroying debug DB statics
Louis Dionne via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Apr 17 10:00:03 PDT 2019
ldionne created this revision.
ldionne added a reviewer: EricWF.
Herald added subscribers: libcxx-commits, dexonsmith, jkorous, christof.
Herald added a project: libc++.
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.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D60830
Files:
libcxx/include/__config
libcxx/src/debug.cpp
Index: libcxx/src/debug.cpp
===================================================================
--- libcxx/src/debug.cpp
+++ libcxx/src/debug.cpp
@@ -42,7 +42,7 @@
__libcpp_db*
__get_db()
{
- static __libcpp_db db;
+ static _LIBCPP_NO_DESTROY __libcpp_db db;
return &db;
}
@@ -64,7 +64,7 @@
mutex_type&
mut()
{
- static mutex_type m;
+ static _LIBCPP_NO_DESTROY mutex_type m;
return m;
}
#endif // !_LIBCPP_HAS_NO_THREADS
Index: libcxx/include/__config
===================================================================
--- libcxx/include/__config
+++ libcxx/include/__config
@@ -1120,6 +1120,12 @@
#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 *);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60830.195592.patch
Type: text/x-patch
Size: 959 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20190417/d9f34933/attachment.bin>
More information about the libcxx-commits
mailing list