Revert r194865 and r194874.

This change is incorrect. If you delete virtual destructor of both a base class
and a subclass, then the following code:
  Base *foo = new Child();
  delete foo;
will not cause the destructor for members of Child class. As a result, I observe
plently of memory leaks. Notable examples I investigated are:
ObjectBuffer and ObjectBufferStream, AttributeImpl and StringSAttributeImpl.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194997 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/IR/AttributeImpl.h b/lib/IR/AttributeImpl.h
index 2d26044..9da3f96 100644
--- a/lib/IR/AttributeImpl.h
+++ b/lib/IR/AttributeImpl.h
@@ -46,6 +46,8 @@
   AttributeImpl(AttrEntryKind KindID) : KindID(KindID) {}
 
 public:
+  virtual ~AttributeImpl();
+
   bool isEnumAttribute() const { return KindID == EnumAttrEntry; }
   bool isAlignAttribute() const { return KindID == AlignAttrEntry; }
   bool isStringAttribute() const { return KindID == StringAttrEntry; }
diff --git a/lib/IR/Attributes.cpp b/lib/IR/Attributes.cpp
index f876778..bcd324c 100644
--- a/lib/IR/Attributes.cpp
+++ b/lib/IR/Attributes.cpp
@@ -286,6 +286,8 @@
 // AttributeImpl Definition
 //===----------------------------------------------------------------------===//
 
+AttributeImpl::~AttributeImpl() {}
+
 bool AttributeImpl::hasAttribute(Attribute::AttrKind A) const {
   if (isStringAttribute()) return false;
   return getKindAsEnum() == A;
diff --git a/lib/IR/Metadata.cpp b/lib/IR/Metadata.cpp
index ef0660d..bd4d9c0 100644
--- a/lib/IR/Metadata.cpp
+++ b/lib/IR/Metadata.cpp
@@ -65,7 +65,7 @@
 
 public:
   MDNodeOperand(Value *V) : CallbackVH(V) {}
-  virtual ~MDNodeOperand();
+  ~MDNodeOperand() {}
 
   void set(Value *V) {
     unsigned IsFirst = this->getValPtrInt();
@@ -82,8 +82,6 @@
 };
 } // end namespace llvm.
 
-MDNodeOperand::~MDNodeOperand() {}
-
 
 void MDNodeOperand::deleted() {
   getParent()->replaceOperand(this, 0);
diff --git a/lib/IR/Value.cpp b/lib/IR/Value.cpp
index a56272f..35808a6 100644
--- a/lib/IR/Value.cpp
+++ b/lib/IR/Value.cpp
@@ -735,5 +735,9 @@
 #endif
 }
 
-// pin vtable to this file
-void CallbackVH::anchor() {}
+// Default implementation for CallbackVH.
+void CallbackVH::allUsesReplacedWith(Value *) {}
+
+void CallbackVH::deleted() {
+  setValPtr(NULL);
+}