diff --git a/llvm/include/llvm/IR/BasicBlock.h b/llvm/include/llvm/IR/BasicBlock.h --- a/llvm/include/llvm/IR/BasicBlock.h +++ b/llvm/include/llvm/IR/BasicBlock.h @@ -89,6 +89,12 @@ using reverse_iterator = InstListType::reverse_iterator; using const_reverse_iterator = InstListType::const_reverse_iterator; + // These functions need access to the instructin list. + friend void Instruction::removeFromParent(); + friend iplist::iterator Instruction::eraseFromParent(); + friend BasicBlock::iterator Instruction::insertAt(BasicBlock *BB, + BasicBlock::iterator It); + /// Creates a new BasicBlock. /// /// If the Parent parameter is specified, the basic block is automatically @@ -366,15 +372,17 @@ } iterator_range phis(); +private: /// Return the underlying instruction list container. - /// - /// Currently you need to access the underlying instruction list container - /// directly if you want to modify it. + /// This is deliberately private because we have implemented an adequate set + /// of functions to modify the list, including BasicBlock::splice(), + /// BasicBlock::erase, Instruction::insertAt() etc. const InstListType &getInstList() const { return InstList; } - InstListType &getInstList() { return InstList; } + InstListType &getInstList() { return InstList; } +public: /// Returns a pointer to a member of the instruction list. - static InstListType BasicBlock::*getSublistAccess(Instruction*) { + static InstListType BasicBlock::*getSublistAccess(Instruction *) { return &BasicBlock::InstList; } diff --git a/llvm/lib/IR/BasicBlock.cpp b/llvm/lib/IR/BasicBlock.cpp --- a/llvm/lib/IR/BasicBlock.cpp +++ b/llvm/lib/IR/BasicBlock.cpp @@ -482,7 +482,7 @@ BasicBlock::iterator BasicBlock::erase(BasicBlock::iterator FromIt, BasicBlock::iterator ToIt) { - return getInstList().erase(FromIt, ToIt); + return InstList.erase(FromIt, ToIt); } void BasicBlock::replacePhiUsesWith(BasicBlock *Old, BasicBlock *New) {