[LLVMdev] Making it possible to clear the LLVMContext

David Blaikie dblaikie at gmail.com
Tue Jun 24 09:14:47 PDT 2014


What're the situation in which you need to clear it? If there are
outstanding users of it (given that you mention clients possibly
holding references to the pimpl, it sounds like you might have
outstanding users) then wouldn't they be at risk of breaking if you
mutate the LLVMContext underneath them?

& if you don't have outstanding users, is there any particular benefit
to resetting the LLVMContext compared to just making a new one?

On Tue, Jun 24, 2014 at 7:18 AM, Marcello Maggioni <hayarms at gmail.com> wrote:
> Hello,
>
> I'm trying to develop a way to reliably clean the LLVMContext in order to
> make it possible to use it multiple times.
>
> LLVMContext itself is an almost empty object delegating almost all its
> content to LLVMContextImpl.
> This makes it very clean ideally, because clearing the LLVMContext would be
> as easy as deleting the LLVMContextImpl and creating a new one.
>
> The problem is that for some reason which I'm not aware of LLVMContextImpl
> is actually exposed as a public pointer in the LLVMContext interface,making
> it publicly available to objects that use it directly (this seems to happen
> quite a lot in the codebase).
>
> In LLVMContext the LLVMContextImpl is contained in a pImpl pointer that is
> const (the pointer itself can't be changed) and I guess this is some kind of
> protection against object replacing the LLVMContextImpl directly, which
> stops us from just deleting it + getting a new one.
> In addition to that, being pImpl public, there is no guarantee that objects
> don't rely on pImpl remaining always the same pointer.
>
> This makes it more difficult to clear LLVMContext.
>
> An approach I thought of could be adding a clear() method to LLVMContext
> that:
>  - Calls directly the destructor of LLVMContextImpl on the pImpl object
>  - Uses a placement new to reinitialize the object.
>  - Recreates the fixed metadata kinds like the LLVMContext constructor does
>
> I'm attaching a patch that show this approach in this mail.
>
> I would like to know a general idea about what people think about this and
> see what people think would be the best approach would be.
>
> Thanks,
> Marcello
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



More information about the llvm-dev mailing list