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`.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224058
91177308-0d34-0410-b5e6-
96231b3b80d8
/// pointers. This should be called when objects are created, or if they are
/// taken out of an owning collection.
///
/// 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
#ifndef NDEBUG
addGarbageObjectImpl(Object);
#endif
/// our "garbage" objects. This should be called when an object is added to
/// an "owning" collection.
///
/// 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
#ifndef NDEBUG
removeGarbageObjectImpl(Object);
#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
- }
-
- // 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(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);
static void addGarbageObjectImpl(void *Object);
static void removeGarbageObjectImpl(void *Object);
static void checkForGarbageImpl(LLVMContext &C, const std::string &Message);