Skip to content

Commit

Permalink
LeakDetector: Simplify code and fix comments, NFC
Browse files Browse the repository at this point in the history
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
  • Loading branch information
dexonsmith committed Dec 11, 2014
1 parent 054eb6c commit 966942d
Showing 1 changed file with 8 additions and 18 deletions.
26 changes: 8 additions & 18 deletions include/llvm/IR/LeakDetector.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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);
Expand Down

0 comments on commit 966942d

Please sign in to comment.