14 #ifndef LLVM_SUPPORT_MANAGEDSTATIC_H
15 #define LLVM_SUPPORT_MANAGEDSTATIC_H
32 static void call(
void *
Ptr) {
delete (
T *)Ptr; }
34 template <
typename T,
size_t N>
36 static void call(
void *
Ptr) {
delete[](
T *)Ptr; }
44 mutable std::atomic<void *>
Ptr;
67 void *Tmp =
Ptr.load(std::memory_order_acquire);
71 return *
static_cast<C *
>(
Ptr.load(std::memory_order_relaxed));
77 void *Tmp =
Ptr.load(std::memory_order_acquire);
81 return *
static_cast<C *
>(
Ptr.load(std::memory_order_relaxed));
99 #endif // LLVM_SUPPORT_MANAGEDSTATIC_H
bool isConstructed() const
isConstructed - Return true if this object has not been created yet.
const C * operator->() const
const C & operator*() const
const ManagedStaticBase * Next
static void call(void *Ptr)
object_deleter - Helper method for ManagedStatic.
void(* DeleterFn)(void *)
LLVM_LIBRARY_VISIBILITY void * object_creator()
object_creator - Helper method for ManagedStatic.
llvm_shutdown_obj()=default
void llvm_shutdown()
llvm_shutdown - Deallocate and destroy all ManagedStatic variables.
#define LLVM_LIBRARY_VISIBILITY
LLVM_LIBRARY_VISIBILITY - If a class marked with this attribute is linked into a shared library...
std::atomic< void * > Ptr
static GCRegistry::Add< ShadowStackGC > C("shadow-stack","Very portable GC for uncooperative code generators")
void RegisterManagedStatic(void *(*creator)(), void(*deleter)(void *)) const
ManagedStaticBase - Common base class for ManagedStatic instances.
static void call(void *Ptr)
llvm_shutdown_obj - This is a simple helper class that calls llvm_shutdown() when it is destroyed...
ManagedStatic - This transparently changes the behavior of global statics to be lazily constructed on...