[LLVMdev] Use still stuck around after Def is destroyed:

Tanya Lattner lattner at apple.com
Wed Oct 26 13:42:03 PDT 2011


On Oct 26, 2011, at 12:18 PM, ret val wrote:

> I made a GlobalVariable that is of type ConstantArray. For one of it's
> elements I assigned it the ConstantExpr::getBitCast of another
> GlobalVariable(the "shadow pointer" mentioned). This gives me:
> 
>        While deleting: i32 (i32)** %Shadow Variable for ptr1
>        Use still stuck around after Def is destroyed:i8* bitcast (i32
> (i32)** @"Shadow Variable for ptr1" to i8*)
>        opt: Value.cpp:75: virtual llvm::Value::~Value(): Assertion
> `use_empty() && "Uses remain when a value is destroyed!"' failed.
> 
> I only see this after my Pass' runOnModule() method is done. I'm not
> sure what I'm doing wrong, this seems like a legitimate actions. I
> also cant come up with another way to do this.
> 

Are you saying that a dead ConstantExpr that uses the Global is hanging around when you try to delete it?

If so, use removeDeadUsersOfConstant() on the Global before you try to remove it.

If the use is not dead, then you can't remove the GlobalVar.

-Tanya

> Any advice?
> Thank you
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20111026/c91a9dc0/attachment.html>


More information about the llvm-dev mailing list