[LLVMdev] Duplicating a Basic Block

Devang Patel devang.patel at gmail.com
Fri Jun 4 10:10:19 PDT 2010

On Fri, Jun 4, 2010 at 2:15 AM, Ambika Agarwal <agarwal.ambika at gmail.com> wrote:
> Hi,
> I had asked earlier from my another ID about duplicating a basic block, but
> that server is down for moment.
> I was given suggestion to use CloneBasicBlock, but when I used it I get an
> error :
> While deleting: i32* %a
> Use still stuck around after Def is destroyed:  store i32* %a, i32** %p,
> align 4
> opt: /home/ambika/llvm_3/llvm-2.6/lib/VMCore/Value.cpp:81: virtual
> llvm::Value::~Value(): Assertion `use_empty() && "Uses remain when a value
> is destroyed!"' failed.
> 0   opt 0x08471218
> Aborted
> This message is printed inside destructor of class value  .
> Now I dont understand that after all the instructions are duplicated why
> does thios kind of error come??
> I will be very thankful if someone can help me.

As the message says, the value being destroyed is used. Check users of
this value. You'll have to update them to use something else before
destroying the value. There is not any magic utility that does
everything. Take a look at how CloneBasicBlock is used other places
and try to update your pass accordingly.


More information about the llvm-dev mailing list