Fix PR95. I'm checking this patch in for Reid Spencer, who figured it out
authorChris Lattner <sabre@nondot.org>
Sun, 9 Nov 2003 19:39:48 +0000 (19:39 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 9 Nov 2003 19:39:48 +0000 (19:39 +0000)
and wrote it up.  Thanks!!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9832 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/SymbolTable.h
lib/VMCore/SymbolTable.cpp

index f457255f3b91d744b3161e3686ff2ac34e1faaa7..42f15aa626e92173e396672c95c9b7efabe6f0ad 100644 (file)
@@ -36,7 +36,7 @@ public:
   typedef VarMap::iterator type_iterator;
   typedef VarMap::const_iterator type_const_iterator;
 
-  inline SymbolTable() : InternallyInconsistent(false) {}
+  inline SymbolTable() : InternallyInconsistent(false), LastUnique(0) {}
   ~SymbolTable();
 
   // lookup - Returns null on failure...
@@ -109,6 +109,10 @@ private:
   //
   bool InternallyInconsistent;
 
+  // LastUnique - This value is used to retain the last unique value used
+  // by getUniqueName to generate unique names.
+  unsigned long LastUnique;
+
   inline super::value_type operator[](const Type *Ty) {
     assert(0 && "Should not use this operator to access symbol table!");
     return super::value_type();
index a6b9a0007b2d87d244b533145b1f34f09e4a073f..9452cdfec4397ec2473b823cf1568ceaacc0265e 100644 (file)
@@ -61,11 +61,10 @@ std::string SymbolTable::getUniqueName(const Type *Ty,
   if (I == end()) return BaseName;
 
   std::string TryName = BaseName;
-  unsigned Counter = 0;
   type_iterator End = I->second.end();
 
-  while (I->second.find(TryName) != End)     // Loop until we find unoccupied
-    TryName = BaseName + utostr(++Counter);  // Name in the symbol table
+  while (I->second.find(TryName) != End)       // Loop until we find a free
+    TryName = BaseName + utostr(++LastUnique); // name in the symbol table
   return TryName;
 }