[LLVMdev] ManagedStatic and order of destruction

Justin Holewinski justin.holewinski at gmail.com
Sat Feb 9 14:25:18 PST 2013


I'm curious about the design rationale for how ManagedStatic instances are
cleaned up, and I'm hoping someone can shed some light on it.

Currently, ManagedStatic objects are cleaned up when llvm_shutdown()
traverses the global list of initialized objects and calls destroy() on
each.  This leads to two questions:

1. An assertion enforces that the objects are deleted in reverse order of
allocation.  Is there any hard requirement for this, or is it only because
of the way the linked list is created?

2. Would anything change (functionally) if we simply called destroy() in
the ManagedStatic destructor?  Wouldn't this be safer than relying on a
client to call llvm_shutdown()?  It seems like the whole purpose of
llvm_shutdown() is to allow clients to free the data allocated by
ManagedStatic instances.  Could we not just give them an option, but by
default clean up during global destruction?

-- 

Thanks,

Justin Holewinski
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130209/e9354c2e/attachment.html>


More information about the llvm-dev mailing list