Use IntrusiveRefCntPtr to manage the lifetime of BitCodeAbbrevs.
[oota-llvm.git] / include / llvm / Bitcode / BitCodes.h
index b510daf331470722684c08e5270cdbb33820b17f..71e0d00da505cbed80d5ce37f3de93a91b237775 100644 (file)
@@ -18,6 +18,7 @@
 #ifndef LLVM_BITCODE_BITCODES_H
 #define LLVM_BITCODE_BITCODES_H
 
+#include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Support/DataTypes.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -161,16 +162,12 @@ template <> struct isPodLike<BitCodeAbbrevOp> { static const bool value=true; };
 /// BitCodeAbbrev - This class represents an abbreviation record.  An
 /// abbreviation allows a complex record that has redundancy to be stored in a
 /// specialized format instead of the fully-general, fully-vbr, format.
-class BitCodeAbbrev {
+class BitCodeAbbrev : public RefCountedBase<BitCodeAbbrev> {
   SmallVector<BitCodeAbbrevOp, 32> OperandList;
-  unsigned char RefCount; // Number of things using this.
   ~BitCodeAbbrev() {}
-public:
-  BitCodeAbbrev() : RefCount(1) {}
-
-  void addRef() { ++RefCount; }
-  void dropRef() { if (--RefCount == 0) delete this; }
+  friend class RefCountedBase; // Only RefCountedBase is allowed to delete.
 
+public:
   unsigned getNumOperandInfos() const {
     return static_cast<unsigned>(OperandList.size());
   }