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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44760 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gordon Henriksen
2007-12-10 02:14:30 +00:00
parent 65b211807d
commit afba8fe662
21 changed files with 228 additions and 663 deletions

View File

@ -65,9 +65,6 @@ private :
BasicBlock(const BasicBlock &); // Do not implement
void operator=(const BasicBlock &); // Do not implement
protected:
static void destroyThis(BasicBlock*);
friend class Value;
public:
/// Instruction iterators...
typedef InstListType::iterator iterator;
@ -79,6 +76,7 @@ public:
///
explicit BasicBlock(const std::string &Name = "", Function *Parent = 0,
BasicBlock *InsertBefore = 0);
~BasicBlock();
/// getParent - Return the enclosing method, or null if none
///
@ -208,33 +206,6 @@ private:
const BasicBlock *getPrev() const { return Prev; }
};
/// DummyInst - An instance of this class is used to mark the end of the
/// instruction list. This is not a real instruction.
class DummyInst : public Instruction {
protected:
static void destroyThis(DummyInst* v) {
Instruction::destroyThis(v);
}
friend class Value;
public:
DummyInst();
Instruction *clone() const {
assert(0 && "Cannot clone EOL");abort();
return 0;
}
const char *getOpcodeName() const { return "*end-of-list-inst*"; }
// Methods for support type inquiry through isa, cast, and dyn_cast...
static inline bool classof(const DummyInst *) { return true; }
static inline bool classof(const Instruction *I) {
return I->getOpcode() == OtherOpsEnd;
}
static inline bool classof(const Value *V) {
return isa<Instruction>(V) && classof(cast<Instruction>(V));
}
};
inline int
ilist_traits<Instruction>::getListOffset() {
return BasicBlock::getInstListOffset();