aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/BasicBlock.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/BasicBlock.h')
-rw-r--r--include/llvm/BasicBlock.h31
1 files changed, 30 insertions, 1 deletions
diff --git a/include/llvm/BasicBlock.h b/include/llvm/BasicBlock.h
index cd38b42..d5a1fe1 100644
--- a/include/llvm/BasicBlock.h
+++ b/include/llvm/BasicBlock.h
@@ -65,6 +65,9 @@ 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;
@@ -76,7 +79,6 @@ public:
///
explicit BasicBlock(const std::string &Name = "", Function *Parent = 0,
BasicBlock *InsertBefore = 0);
- ~BasicBlock();
/// getParent - Return the enclosing method, or null if none
///
@@ -206,6 +208,33 @@ 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();