VStudio compiler errors and placing Function*->ExFunc map under ManagedStatic control.
authorChuck Rose III <cfr@adobe.com>
Fri, 27 Jul 2007 18:26:35 +0000 (18:26 +0000)
committerChuck Rose III <cfr@adobe.com>
Fri, 27 Jul 2007 18:26:35 +0000 (18:26 +0000)
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

lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp
lib/Transforms/Scalar/LoopUnswitch.cpp
utils/TableGen/RegisterInfoEmitter.cpp

index 14dcdf9e0364595cab0c8d5d60dbcdf3a8a69b6e..55391df888696a929f977c5f93cd4c78d76c639e 100644 (file)
@@ -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 <csignal>
 #include <map>
 #include <cmath>
@@ -33,7 +34,7 @@ using std::vector;
 using namespace llvm;
 
 typedef GenericValue (*ExFunc)(FunctionType *, const vector<GenericValue> &);
-static std::map<const Function *, ExFunc> Functions;
+static ManagedStatic<std::map<const Function *, ExFunc> > Functions;
 static std::map<std::string, ExFunc> 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<const Function *, ExFunc>::iterator FI = Functions.find(F);
-  ExFunc Fn = (FI == Functions.end()) ? lookupFunction(F) : FI->second;
+  std::map<const Function *, ExFunc>::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";
index 5caf01cf1001d2cedcb4ef626f4cc976d618ef7c..3ef6376899a51e1678bb40563650e867eddb18bb 100644 (file)
@@ -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<const Value*, Value*>::iterator I = VM.find(BB);
-        if (I != VM.end())
-          NewDFSet.insert(cast<BasicBlock>(I->second));
+        DenseMap<const Value*, Value*>::iterator IDM = VM.find(BB);
+        if (IDM != VM.end())
+          NewDFSet.insert(cast<BasicBlock>(IDM->second));
         else
           NewDFSet.insert(BB);
       }
index 2bb4695c09b5b279dfff9fa46418511bc8a8bccf..a8690041bf866718e142c0556815dee97c96c72c 100644 (file)
@@ -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];