On Mon, Apr 26, 2010 at 12:44 AM, Paul Melis <span dir="ltr"><<a href="mailto:llvm@assumetheposition.nl">llvm@assumetheposition.nl</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div><div></div><div class="h5">Hi,<br>
<br>
Talin wrote:<br>
> I'm a little confused as to the rules for the arguments to llvm.gcroot,<br>
> which says it must be a pointer alloca. I'm not sure whether that means it<br>
> must be an alloca (which is always a pointer by definition) or an alloca<br>
> *of* a pointer.<br>
<br>
I'm pretty sure it should be "alloca of a pointer", as the first argument<br>
of llvm.gcroot has type i8**.<br>
<br>
However, <a href="http://llvm.org/docs/GarbageCollection.html#gcroot" target="_blank">http://llvm.org/docs/GarbageCollection.html#gcroot</a>, isn't<br>
completely clear on this:<br>
<br>
"The first argument must be a value referring to an alloca instruction or<br>
a bitcast of an alloca."<br>
<br>
This last sentence seems to rule out passing GEPs on alloca's to llvm.gcroot.<br>
<br>
> What I am trying to figure out is how to declare roots contained in value<br>
> types. Suppose for example I have a small struct which contains several<br>
> garbage-collectable references. This struct is a local variable, so it's<br>
> contained in a block of memory which has been allocated via alloca. Now, I<br>
> don't want to add the struct itself as a root, since it isn't allocated on<br>
> the heap. But I want to declare the fields within the struct - which are<br>
> GEPs from the alloca pointer - as roots, since they are references to<br>
> objects on the heap.<br>
<br>
As reasonable as the above sounds, I don't think you can mark roots<br>
contained in structs. But if I'm wrong I'd love to know ;-)  Perhaps you<br>
can ask the LDC devs how/if they handle this case, as it seems you can<br>
allocate a class instance on the stack in D.<br>
<br></div></div></blockquote><div>Ugh. If all roots have to be singleton pointers, not embedded within a larger structure, then I'm not sure that what I want to do is even possible.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div><div class="h5">
Regards,<br>
Paul<br>
<br>
<br>
<br>
<br>
</div></div><div><div></div><div class="h5">_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>-- Talin<br>