[LLVMdev] Question about intrinsic function llvm.objectsize

Shuxin Yang shuxin.llvm at gmail.com
Wed Feb 27 10:53:06 PST 2013


> In the "llvm.objectsize" context we pass an object "based on p" to getObjectSize: "p+50". In the basicaa context, we wanna know whether an access is beyond the bounds of an underlying object (undefined behavior land) so we pass the underlying object (which in your example would be the "p" returned from malloc) to the getObjectSize function.
>
> In the first case (passing "p+50" to getObjectSize) ObjSize should be 56 and the Offset will be 50 yielding 6 in the second case your ObjSize will be 56 and the offset is zero because basicaa passed the underlying object "p".
you figured out an alternative to fix the problem.  In the context of 
alias analysis, it is up to the caller to pass
the base addr of the "object" to getObjectSize() by calling 
getUnderlyingObject().

However,  if the base-addr is bit complicated, say, one needs to go 
through U-D chain (including phi node).
In this situation, a helper class ObjectSizeOffsetVisitor will help.

My take is to implement another function, call getEntireObjectSize(p) 
which returns the size of the entire object
no matter where the p is pointing to. How does this sound to you?

Thanks





More information about the llvm-dev mailing list