From: Chuck Rose III Date: Fri, 27 Jul 2007 18:26:35 +0000 (+0000) Subject: VStudio compiler errors and placing Function*->ExFunc map under ManagedStatic control. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=936baaa5aeddb78ff41b1f655101b4d88c47473b;p=oota-llvm.git VStudio compiler errors and placing Function*->ExFunc map under ManagedStatic control. This commit fixes two things. One is a pair of VStudio compiler errors stemming from variables which defined within the for loop statement and also within the body of the for loop. I fixed these by renaming one of the two variables. Additionally, I've made the Function*->ExFunc map in ExternalFunctions.cpp a ManagedStatic object, so that cleanup will be done on llvm_shutdown. In repeated uses of the interpreter, where the same Function* address may get used for completely differnet functions, this was causing a crash. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40558 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp index 14dcdf9e036..55391df8886 100644 --- a/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp +++ b/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp @@ -25,6 +25,7 @@ #include "llvm/Support/Streams.h" #include "llvm/System/DynamicLibrary.h" #include "llvm/Target/TargetData.h" +#include "llvm/Support/ManagedStatic.h" #include #include #include @@ -33,7 +34,7 @@ using std::vector; using namespace llvm; typedef GenericValue (*ExFunc)(FunctionType *, const vector &); -static std::map Functions; +static ManagedStatic > Functions; static std::map FuncNames; static Interpreter *TheInterpreter; @@ -80,7 +81,7 @@ static ExFunc lookupFunction(const Function *F) { FnPtr = (ExFunc)(intptr_t) sys::DynamicLibrary::SearchForAddressOfSymbol(F->getName()); if (FnPtr != 0) - Functions.insert(std::make_pair(F, FnPtr)); // Cache for later + Functions->insert(std::make_pair(F, FnPtr)); // Cache for later return FnPtr; } @@ -90,8 +91,8 @@ GenericValue Interpreter::callExternalFunction(Function *F, // Do a lookup to see if the function is in our cache... this should just be a // deferred annotation! - std::map::iterator FI = Functions.find(F); - ExFunc Fn = (FI == Functions.end()) ? lookupFunction(F) : FI->second; + std::map::iterator FI = Functions->find(F); + ExFunc Fn = (FI == Functions->end()) ? lookupFunction(F) : FI->second; if (Fn == 0) { cerr << "Tried to execute an unknown external function: " << F->getType()->getDescription() << " " << F->getName() << "\n"; diff --git a/lib/Transforms/Scalar/LoopUnswitch.cpp b/lib/Transforms/Scalar/LoopUnswitch.cpp index 5caf01cf100..3ef6376899a 100644 --- a/lib/Transforms/Scalar/LoopUnswitch.cpp +++ b/lib/Transforms/Scalar/LoopUnswitch.cpp @@ -482,9 +482,9 @@ void CloneDomInfo(BasicBlock *NewBB, BasicBlock *Orig, for (DominanceFrontier::DomSetType::iterator I = S.begin(), E = S.end(); I != E; ++I) { BasicBlock *BB = *I; - DenseMap::iterator I = VM.find(BB); - if (I != VM.end()) - NewDFSet.insert(cast(I->second)); + DenseMap::iterator IDM = VM.find(BB); + if (IDM != VM.end()) + NewDFSet.insert(cast(IDM->second)); else NewDFSet.insert(BB); } diff --git a/utils/TableGen/RegisterInfoEmitter.cpp b/utils/TableGen/RegisterInfoEmitter.cpp index 2bb4695c09b..a8690041bf8 100644 --- a/utils/TableGen/RegisterInfoEmitter.cpp +++ b/utils/TableGen/RegisterInfoEmitter.cpp @@ -240,8 +240,8 @@ void RegisterInfoEmitter::run(std::ostream &OS) { bool Empty = true; - for (unsigned subrc = 0, e2 = RC.SubRegClasses.size(); - subrc != e2; ++subrc) { + for (unsigned subrc = 0, subrcMax = RC.SubRegClasses.size(); + subrc != subrcMax; ++subrc) { unsigned rc2 = 0, e2 = RegisterClasses.size(); for (; rc2 != e2; ++rc2) { const CodeGenRegisterClass &RC2 = RegisterClasses[rc2];