<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Sep 7, 2017 at 12:01 PM, Adrian Prantl <span dir="ltr"><<a href="mailto:aprantl@apple.com" target="_blank">aprantl@apple.com</a>></span> wrote:<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div>Is the restriction precisely that all dbg.addr for the same variable/!dbg combination must describe the same alloca?</div></div></blockquote><div><br></div><div>Yes, but there are cases where dbg.addr won't be based on an alloca. I think the invariant should be that they all refer to the same SSA value. Consider RVO cases, where it refers to the sret %agg.result parameter.</div><div>  </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div>I think I like this proposal for all the reasons that were discussed in the previous thread.</div></div></blockquote><div><br></div><div>Great! </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div>A couple of questions for my understanding:</div><div>Your examples didn't show it, but I assume that dbg.addr will still allow a DIExpression (for things similarly complicated as block captures)?</div></div></blockquote><div><br></div><div>Yes.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div>What exactly is allowed as the first parameter of a dbg.addr? Only allocas? Anything else?</div></div></blockquote><div><br></div><div>Any pointer value. Maybe we could allow pointer-sized integers, but that anything else is probably indescribable. If the base pointer is in XMM0, how would we describe that with DWARF?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="word-wrap:break-word"><div>Should an sret parameter or similar be described by a dbg.addr?</div></div></blockquote><div><br></div><div>Yes. We should be able to inline functions that use RVO, SROA the alloca passed in for sret, and get good dbg.value instructions. Likewise for other non-trivially copyable C++ objects passed by value as arguments.</div></div></div></div>