Reverting dtor devirtualization patch.
_sabre_: it has a major problem: by the time ~Value is run, all of the "parts" of the derived classes have been destroyed
_sabre_: the vtable lives to fight another day
llvm-svn: 44760
diff --git a/llvm/lib/VMCore/Instructions.cpp b/llvm/lib/VMCore/Instructions.cpp
index 84adc50..0df0466 100644
--- a/llvm/lib/VMCore/Instructions.cpp
+++ b/llvm/lib/VMCore/Instructions.cpp
@@ -67,6 +67,20 @@
}
+
+//===----------------------------------------------------------------------===//
+// TerminatorInst Class
+//===----------------------------------------------------------------------===//
+
+// Out of line virtual method, so the vtable, etc has a home.
+TerminatorInst::~TerminatorInst() {
+}
+
+// Out of line virtual method, so the vtable, etc has a home.
+UnaryInstruction::~UnaryInstruction() {
+}
+
+
//===----------------------------------------------------------------------===//
// PHINode Class
//===----------------------------------------------------------------------===//
@@ -82,9 +96,8 @@
}
}
-void PHINode::destroyThis(PHINode*v) {
- delete [] v->OperandList;
- Instruction::destroyThis(v);
+PHINode::~PHINode() {
+ delete [] OperandList;
}
// removeIncomingValue - Remove an incoming value. This is useful if a
@@ -201,11 +214,10 @@
// CallInst Implementation
//===----------------------------------------------------------------------===//
-void CallInst::destroyThis(CallInst*v) {
- delete [] v->OperandList;
- if (v->ParamAttrs)
- v->ParamAttrs->dropRef();
- Instruction::destroyThis(v);
+CallInst::~CallInst() {
+ delete [] OperandList;
+ if (ParamAttrs)
+ ParamAttrs->dropRef();
}
void CallInst::init(Value *Func, Value* const *Params, unsigned NumParams) {
@@ -394,11 +406,10 @@
// InvokeInst Implementation
//===----------------------------------------------------------------------===//
-void InvokeInst::destroyThis(InvokeInst*v) {
- delete [] v->OperandList;
- if (v->ParamAttrs)
- v->ParamAttrs->dropRef();
- TerminatorInst::destroyThis(v);
+InvokeInst::~InvokeInst() {
+ delete [] OperandList;
+ if (ParamAttrs)
+ ParamAttrs->dropRef();
}
void InvokeInst::init(Value *Fn, BasicBlock *IfNormal, BasicBlock *IfException,
@@ -672,6 +683,10 @@
setName(Name);
}
+// Out of line virtual method, so the vtable, etc has a home.
+AllocationInst::~AllocationInst() {
+}
+
bool AllocationInst::isArrayAllocation() const {
if (ConstantInt *CI = dyn_cast<ConstantInt>(getOperand(0)))
return CI->getZExtValue() != 1;
@@ -936,8 +951,8 @@
setName(Name);
}
-void GetElementPtrInst::destroyThis(GetElementPtrInst*v) {
- delete[] v->OperandList;
+GetElementPtrInst::~GetElementPtrInst() {
+ delete[] OperandList;
}
// getIndexedType - Returns the type of the element that would be loaded with
@@ -2454,9 +2469,8 @@
}
}
-void SwitchInst::destroyThis(SwitchInst*v) {
- delete [] v->OperandList;
- TerminatorInst::destroyThis(v);
+SwitchInst::~SwitchInst() {
+ delete [] OperandList;
}