<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Nov 7, 2013 at 11:02 AM, Yin Ma <span dir="ltr"><<a href="mailto:yinma@codeaurora.org" target="_blank">yinma@codeaurora.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="color:#1f497d">Hi John,<u></u><u></u></span></p>
<p class="MsoNormal"><span style="color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="color:#1f497d">It seems the dereferencing a NULL pointer is undefined behavior but<u></u><u></u></span></p><p class="MsoNormal">
<span style="color:#1f497d">Calling a function through a null pointer seems o.k.</span></p></div></div></blockquote><div><br></div><div>What is the well defined behavior of calling a null function pointer?</div><div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="color:#1f497d"><u></u><u></u></span></p>
<p class="MsoNormal"><span style="color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="color:#1f497d">If so , for this place, we need comment out the check.<u></u><u></u></span></p><p class="MsoNormal">
<span style="color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="color:#1f497d"><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232" target="_blank">http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232</a><u></u><u></u></span></p>
<p class="MsoNormal"><span style="color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="color:#1f497d">look at Notes from the October 2003 meeting.</span></p></div></div></blockquote><div><br></div><div>
This doesn't seem to describe well-defined behavior of calling a null function pointer. It talks about the narrow case of dereferencing a null pointer but not performing an lvalue to rvalue conversion with the result.</div>
<div><br></div><div>- David</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal">
<span style="color:#1f497d"><u></u><u></u></span></p><p class="MsoNormal"><span style="color:#1f497d"><u></u> <u></u></span></p><p class="MsoNormal"><span style="color:#1f497d">Yin <u></u><u></u></span></p><p class="MsoNormal">
<span style="color:#1f497d"><u></u> <u></u></span></p><div><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif";color:windowtext"> John Criswell [mailto:<a href="mailto:criswell@illinois.edu" target="_blank">criswell@illinois.edu</a>] <br>
<b>Sent:</b> Wednesday, November 06, 2013 6:28 PM<br><b>To:</b> Yin Ma; 'llvmdev Dev'<br><b>Subject:</b> Re: [LLVMdev] Should remove calling NULL pointer or not<u></u><u></u></span></p></div></div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">On 11/6/13 6:36 PM, Yin Ma wrote:<u></u><u></u></p></div><blockquote style="margin-top:5.0pt;margin-bottom:5.0pt"><p class="MsoNormal">Hi,<u></u><u></u></p>
<p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">For a small case, that calls NULL pointer function. LLVM explicitly converts<u></u><u></u></p><p class="MsoNormal">It to a store because it thinks it is not reachable like calling undefvalue.<u></u><u></u></p>
<p class="MsoNormal">In InstCombineCalls.cpp:930<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">I think it is not a right approach because calling null pointer function <u></u><u></u></p><p class="MsoNormal">
Will segfault the program. Converting to a store will make program pass<u></u><u></u></p><p class="MsoNormal">Silently. This changes the behavior of a program. <u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">
So we need remove the case if (isa<ConstantPointerNull>(Callee) at <u></u><u></u></p><p class="MsoNormal">InstCombineCalls.cpp:918 and treat calling Null pointer reachable.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p>
<p class="MsoNormal">How do you think? Is there any reason that we should convert <u></u><u></u></p><p class="MsoNormal">a calling null pointer to a store?<u></u><u></u></p></blockquote><p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br>
If calling a NULL function pointer yields undefined behavior (as defined by the C/C++ standards), then the optimization is correct: since the behavior is undefined, the compiler can change it as it sees fits.  In other words, the compiler is not required to maintain "incorrect" behavior.<br>
<br>The remaining question, then, is whether the C/C++ standards consider calling a NULL function pointer undefined behavior.  I suspect that it is undefined behavior, but to be honest, I do not know for certain.<br><br>-- John T.<br>
<br><br><br><br><u></u><u></u></span></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Thanks,<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Yin <u></u><u></u></p><p class="MsoNormal">
 <u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><br>
<br><br><u></u><u></u></span></p><pre>_______________________________________________<u></u><u></u></pre><pre>LLVM Developers mailing list<u></u><u></u></pre><pre><a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><u></u><u></u></pre>
<pre><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><u></u><u></u></pre><p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Times New Roman","serif""><u></u> <u></u></span></p>
</div></div></div></div><br>_______________________________________________<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>
<br></blockquote></div><br></div></div>