[Support/StringSet] Fix memory leak when inserted key already exists.
authorMichael J. Spencer <bigcheesegs@gmail.com>
Tue, 23 Oct 2012 22:55:54 +0000 (22:55 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Tue, 23 Oct 2012 22:55:54 +0000 (22:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166517 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/StringSet.h

index 9c55f6b70e369ec577948e12eea692b11a4242ea..b69a964a23bae933d544cf54638eff30a091f152 100644 (file)
@@ -29,8 +29,13 @@ namespace llvm {
       assert(!InLang.empty());
       const char *KeyStart = InLang.data();
       const char *KeyEnd = KeyStart + InLang.size();
-      return base::insert(llvm::StringMapEntry<char>::
-                          Create(KeyStart, KeyEnd, base::getAllocator(), '+'));
+      llvm::StringMapEntry<char> *Entry = llvm::StringMapEntry<char>::
+                            Create(KeyStart, KeyEnd, base::getAllocator(), '+');
+      if (!base::insert(Entry)) {
+        Entry->Destroy(base::getAllocator());
+        return false;
+      }
+      return true;
     }
   };
 }