[PATCH] Introduce needsCleanup() for APFloat and APInt
Shuxin Yang
shuxin.llvm at gmail.com
Mon May 13 10:26:23 PDT 2013
On 5/13/13 10:21 AM, Manuel Klimek wrote:
> +richard smith, who proposed to implement it this way
>
> On Mon, May 13, 2013 at 6:08 PM, Shuxin Yang <shuxin.llvm at gmail.com
> <mailto:shuxin.llvm at gmail.com>> wrote:
>
> I'm afraid this change is going to open a big can of worms. You
> are essentially promote
> private member function to be public. Such practice should be
> generally avoided even for
> the local/private class which is used in small scope, let alone
> these fundamental structures
> which are extensively used in the compiler.
>
> > object needs the destructor called after its memory was freed
>
> If the block of memory containing APFloat/APInt is already freed,
> how do you know
> the state of these objects are still valid? Depending on the
> implementation, free-operation
> might clobber the memory with some special value for debugging
> purpose. If it were safe
> to call needsCleanup(), why not directly call the destructor? Is
> needsCleanup() sufficient
> and/or necessary condition for calling the destructor? How do we
> keep them in sync in the
> future?
>
>
> APFloat/APInt is placement new'ed in the code in question, and thus we
> need to call the destructors of any objects that do memory allocation
> themselves. We can save those destructor calls otherwise.
I understand that if you place a non-plain-old-data in a union, you have
to construct it via placement new,
and explicitly destruct it. I come across similar problem when I
implement unsafe fadd/fsub optimization
half year ago.
My questions are :
- why do you need to call function xyz() before calling the destructor.
- if the memory is already freed, why do you know it is safe to call
syz().
The object may not in valid state.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130513/f18286ba/attachment.html>
More information about the llvm-commits
mailing list