LeakDetector: Simplify code and fix comments, NFC
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Thu, 11 Dec 2014 21:23:43 +0000 (21:23 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Thu, 11 Dec 2014 21:23:43 +0000 (21:23 +0000)
Rather than requiring overloads in the wrapper and the impl, just
overload the impl and use templates in the wrapper.  This makes it less
error prone to add more overloads (`void *` defeats any chance the
compiler has at noticing bugs, so the easier the better).

At the same time, correct the comment that was lying about not changing
functionality for `Value`.

llvm-svn: 224058

llvm/include/llvm/IR/LeakDetector.h

index cb18df8..fb3202e 100644 (file)
@@ -34,7 +34,7 @@ struct LeakDetector {
   /// pointers.  This should be called when objects are created, or if they are
   /// taken out of an owning collection.
   ///
-  static void addGarbageObject(void *Object) {
+  template <class T> static void addGarbageObject(T *Object) {
 #ifndef NDEBUG
     addGarbageObjectImpl(Object);
 #endif
@@ -44,7 +44,7 @@ struct LeakDetector {
   /// our "garbage" objects.  This should be called when an object is added to
   /// an "owning" collection.
   ///
-  static void removeGarbageObject(void *Object) {
+  template <class T> static void removeGarbageObject(T *Object) {
 #ifndef NDEBUG
     removeGarbageObjectImpl(Object);
 #endif
@@ -63,25 +63,15 @@ struct LeakDetector {
 #endif
   }
 
-  /// Overload the normal methods to work better with Value*'s because they are
-  /// by far the most common in LLVM.  This does not affect the actual
-  /// functioning of this class, it just makes the warning messages nicer.
-  ///
-  static void addGarbageObject(const Value *Object) {
-#ifndef NDEBUG
-    addGarbageObjectImpl(Object);
-#endif
-  }
-  static void removeGarbageObject(const Value *Object) {
-#ifndef NDEBUG
-    removeGarbageObjectImpl(Object);
-#endif
-  }
-
 private:
-  // If we are debugging, the actual implementations will be called...
+  /// Overload the normal methods to work better with Value* because they are
+  /// by far the most common in LLVM.
+  ///
+  /// Besides making the warning messages nicer, this hides errors by storing
+  /// Value* in a different leak-detection container than other classes.
   static void addGarbageObjectImpl(const Value *Object);
   static void removeGarbageObjectImpl(const Value *Object);
+
   static void addGarbageObjectImpl(void *Object);
   static void removeGarbageObjectImpl(void *Object);
   static void checkForGarbageImpl(LLVMContext &C, const std::string &Message);