在我的llvm
代碼中,我嘗試檢查迭代器InsertPos是否指向基本塊的最後一條指令,代碼如下。如何檢查迭代器的相等性?
BasicBlock::iterator InsertPos = BB->begin();
LLVMContext &Context = BB->getContext();
while (!(isa<CallInst>(InsertPos) ||
(InsertPos == BB->getTerminator()))) // <-- Error here
++InsertPos;
但是,clang
給我以下錯誤。
Basic2.cpp:82:54: error: use of overloaded operator '==' is ambiguous (with operand types 'BasicBlock::iterator' (aka 'ilist_iterator<llvm::Instruction>')
and 'llvm::TerminatorInst *')
while (!(isa<CallInst>(InsertPos) || (InsertPos == BB->getTerminator())))
~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/home/hmushtaq/llvm/include/llvm/ADT/ilist.h:204:8: note: candidate function
bool operator==(const ilist_iterator &RHS) const {
^
Basic2.cpp:82:54: note: built-in candidate operator==(class llvm::Instruction *, class llvm::Instruction *)
while (!(isa<CallInst>(InsertPos) || (InsertPos == BB->getTerminator())))
^
Basic2.cpp:82:54: note: built-in candidate operator==(restrict class llvm::Instruction *, restrict class llvm::Instruction *)
Basic2.cpp:82:54: note: built-in candidate operator==(const restrict class llvm::Instruction *, const restrict class llvm::Instruction *)
Basic2.cpp:82:54: note: built-in candidate operator==(volatile class llvm::Instruction *, volatile class llvm::Instruction *)
Basic2.cpp:82:54: note: built-in candidate operator==(const volatile class llvm::Instruction *, const volatile class llvm::Instruction *)
Basic2.cpp:82:54: note: built-in candidate operator==(volatile restrict class llvm::Instruction *, volatile restrict class llvm::Instruction *)
Basic2.cpp:82:54: note: built-in candidate operator==(const class llvm::Instruction *, const class llvm::Instruction *)
Basic2.cpp:82:54: note: built-in candidate operator==(const volatile restrict class llvm::Instruction *, const volatile restrict class llvm::Instruction *)
這樣做的正確方法是什麼?