<div dir="ltr"><span style="color:rgb(33,33,33);font-family:arial,helvetica,sans-serif">> llvm::ArrayRef<</span><span style="color:rgb(33,33,33);font-family:arial,helvetica,sans-serif;font-variant-ligatures:no-common-ligatures">SDValue> Ops = { Lo, Hi };</span>  <br><div><br></div><div>{Lo, Hi} is a temporary object in stack and it is supposed to vanish after the statement.</div><div>You may write like ; (See X86ISelLowering.cpp:21709)</div><div><br></div><div><div>  SDValue Ops[] = { Lo, Hi };</div><div>  return DAG.getMergeValues(Ops, dl);</div></div><div><br></div><div>ArrayRef's constructor recognizes and infers array.</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, May 22, 2017 at 8:27 PM 陳韋任 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 dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Hi All,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">  I debug a Release build LLVM crash, and find the culprit. The code snippet below,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default"><font face="arial, helvetica, sans-serif">    llvm::ArrayRef<<span style="font-variant-ligatures:no-common-ligatures">SDValue> Ops = { Lo, Hi }; // should be `SDValue Ops[2] </span></font><span style="font-family:arial,helvetica,sans-serif;font-variant-ligatures:no-common-ligatures">= { Lo, Hi };</span><span style="font-variant-ligatures:no-common-ligatures;font-family:arial,helvetica,sans-serif">`</span></div><div class="gmail_default"><font face="arial, helvetica, sans-serif"><span style="font-variant-ligatures:no-common-ligatures">    </span><span style="font-variant-ligatures:no-common-ligatures">return DAG.getMergeValues(Ops, dl);</span></font></div><div class="gmail_default"><span style="font-variant-ligatures:no-common-ligatures"><font face="arial, helvetica, sans-serif"><br></font></span></div><div class="gmail_default"><span style="font-variant-ligatures:no-common-ligatures"><font face="arial, helvetica, sans-serif">Turns out a nullptr is dereferenced in </font></span><span style="font-family:arial,helvetica,sans-serif;font-variant-ligatures:no-common-ligatures">DAG.getMergeValues, thus I have segfault.</span></div><div class="gmail_default"><span style="font-family:arial,helvetica,sans-serif;font-variant-ligatures:no-common-ligatures"><br></span></div><div class="gmail_default"><span style="font-family:arial,helvetica,sans-serif;font-variant-ligatures:no-common-ligatures">From the comment on [1], it says:</span></div><div class="gmail_default"><br></div><div class="gmail_default">    This class does not own the underlying data, it is expected to be used in situations</div><div class="gmail_default">    where the data resides in some other buffer, whose lifetime extends past that of the</div><div class="gmail_default">    ArrayRef. For this reason, it is not in general safe to store an ArrayRef.<br></div><div class="gmail_default"><br></div><div class="gmail_default">I feel somehow the comment explain why I get the segfault, but not sure about that.</div><div class="gmail_default">Would someone kindly explain why?</div><div class="gmail_default"><br></div><div class="gmail_default">  Thanks.</div>















<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">[1] <a href="http://llvm.org/doxygen/classllvm_1_1ArrayRef.html" target="_blank">http://llvm.org/doxygen/classllvm_1_1ArrayRef.html</a></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Regards,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">chenwj</div><div><br></div>-- <br><div class="m_-6127993090594686817gmail_signature"><div dir="ltr"><div>Wei-Ren Chen (陳韋任)<br>Homepage: <a href="https://people.cs.nctu.edu.tw/~chenwj" target="_blank">https://people.cs.nctu.edu.tw/~chenwj</a></div></div></div>
</div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>