From 2d2928a89132f07ab760ed11a5cecb7851bdbc04 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 13 Jan 2003 00:52:43 +0000 Subject: Fix static initializer ordering dependency llvm-svn: 5236 --- llvm/lib/Support/Annotation.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'llvm/lib/Support/Annotation.cpp') diff --git a/llvm/lib/Support/Annotation.cpp b/llvm/lib/Support/Annotation.cpp index e876bf4f38b..96ead521f50 100644 --- a/llvm/lib/Support/Annotation.cpp +++ b/llvm/lib/Support/Annotation.cpp @@ -20,7 +20,22 @@ static IDMapType &getIDMap() { static IDMapType TheMap; return TheMap; } // On demand annotation creation support... typedef Annotation *(*AnnFactory)(AnnotationID, const Annotable *, void *); typedef map > FactMapType; -static FactMapType &getFactMap() { static FactMapType FactMap; return FactMap; } + +static FactMapType *TheFactMap = 0; +static FactMapType &getFactMap() { + if (TheFactMap == 0) + TheFactMap = new FactMapType(); + return *TheFactMap; +} + +static void eraseFromFactMap(unsigned ID) { + assert(TheFactMap && "No entries found!"); + TheFactMap->erase(ID); + if (TheFactMap->empty()) { // Delete when empty + delete TheFactMap; + TheFactMap = 0; + } +} AnnotationID AnnotationManager::getID(const string &Name) { // Name -> ID @@ -64,7 +79,7 @@ void AnnotationManager::registerAnnotationFactory(AnnotationID ID, if (F) getFactMap()[ID.ID] = make_pair(F, ExtraData); else - getFactMap().erase(ID.ID); + eraseFromFactMap(ID.ID); } // createAnnotation - Create an annotation of the specified ID for the -- cgit v1.2.3