How to convert an iterator to an object pointer

I have a pointer to a basic block and am iterating thru its
predecessor blocks. I want to get a pointer to the predecessor block.
How do I do it. I am using following code and it given compile time

error: cannot convert 'llvm::const_pred_iterator' to 'const
llvm::BasicBlock*' in initialization

    const BasicBlock *b = PH->getParent();
    // process all pred block of the current block
    for (const_pred_iterator pr=pred_begin(b), esc=pred_end(b); pr!=esc; ++pr)
      { const BasicBlock *p = pr; // ************error line ****************

Try using *pr instead.


Hi Surinder,

You’ll need to dereference your iterator to get a pointer:

const BasicBlock *p = *pr;


Thanks. *p=*pr; works. I am passing *p to dominates function of
dominator tree and it does not like *pr, but is happy with *p.