<div dir="auto"><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">On Mon, Jan 6, 2020, 18:45 Jie Zhou via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div style="word-wrap:break-word;line-break:after-white-space">
Dear All,</div></blockquote></div><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space"><div><snip></div></div></blockquote></div><div class="gmail_quote" dir="auto"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;line-break:after-white-space"><div>Can you give me some advice on how to implement<br></div>
<div>a fat pointer in llvm?</div></div></blockquote></div><div dir="auto"><br></div><div dir="auto">Rustc currently implements fat pointers in function arguments by passing a pair of arguments: the pointer to the object's data and the associated data which is either the length as a usize (C's uintptr_t) or a pointer to the vtable. Fat pointers in return values are passed as a two-member struct where the first member is the pointer to the object's data and the second is the length or vtable pointer.</div><div dir="auto"><br></div><div dir="auto">See <a href="https://rust.godbolt.org/z/cjoRNG">https://rust.godbolt.org/z/cjoRNG</a> for the (definitely non-idiomatic) rust source code as well as the LLVM IR.</div><div dir="auto"><br></div><div dir="auto">Btw, <span style="font-family:sans-serif">you should definitely check out Rust if you haven't already at </span><font face="sans-serif"><a href="https://www.rust-lang.org/">https://www.rust-lang.org/</a></font></div><div dir="auto"><br></div><div dir="auto">Jacob Lifshay</div><div class="gmail_quote" dir="auto"></div></div>