Hi John, It seems the dereferencing a NULL pointer is undefined behavior but Calling a function through a null pointer seems o.k. If so , for this place, we need comment out the check. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232 look at Notes from the October 2003 meeting. Yin From: John Criswell [mailto:criswell at illinois.edu] Sent: Wednesday, November 06, 2013 6:28 PM To: Yin Ma; 'llvmdev Dev' Subject: Re: [LLVMdev] Should remove calling NULL pointer or not On 11/6/13 6:36 PM, Yin Ma wrote: Hi, For a small case, that calls NULL pointer function. LLVM explicitly converts It to a store because it thinks it is not reachable like calling undefvalue. In InstCombineCalls.cpp:930 I think it is not a right approach because calling null pointer function Will segfault the program. Converting to a store will make program pass Silently. This changes the behavior of a program. So we need remove the case if (isa<ConstantPointerNull>(Callee) at InstCombineCalls.cpp:918 and treat calling Null pointer reachable. How do you think? Is there any reason that we should convert a calling null pointer to a store? 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. 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. -- John T. Thanks, Yin _______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131107/9bcdc80c/attachment.html>
On Thu, Nov 7, 2013 at 11:02 AM, Yin Ma <yinma at codeaurora.org> wrote:> Hi John, > > > > It seems the dereferencing a NULL pointer is undefined behavior but > > Calling a function through a null pointer seems o.k. >What is the well defined behavior of calling a null function pointer?> > > If so , for this place, we need comment out the check. > > > > http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232 > > > > look at Notes from the October 2003 meeting. >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. - David> > > Yin > > > > *From:* John Criswell [mailto:criswell at illinois.edu] > *Sent:* Wednesday, November 06, 2013 6:28 PM > *To:* Yin Ma; 'llvmdev Dev' > *Subject:* Re: [LLVMdev] Should remove calling NULL pointer or not > > > > On 11/6/13 6:36 PM, Yin Ma wrote: > > Hi, > > > > For a small case, that calls NULL pointer function. LLVM explicitly > converts > > It to a store because it thinks it is not reachable like calling > undefvalue. > > In InstCombineCalls.cpp:930 > > > > I think it is not a right approach because calling null pointer function > > Will segfault the program. Converting to a store will make program pass > > Silently. This changes the behavior of a program. > > > > So we need remove the case if (isa<ConstantPointerNull>(Callee) at > > InstCombineCalls.cpp:918 and treat calling Null pointer reachable. > > > > How do you think? Is there any reason that we should convert > > a calling null pointer to a store? > > > 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. > > 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. > > -- John T. > > > > > > > Thanks, > > > > Yin > > > > > > > > > > > > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131107/4b289c83/attachment.html>
It seems to me that the issue referenced by that meeting (http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#315) is saying that dereferencing the NULL pointer to an object is valid as part of evaluating the address of a member function (because the dereferenced NULL is not converted to an rvalue). It doesn't seem to be saying that calling a NULL function pointer is valid. From: llvmdev-bounces at cs.uiuc.edu [mailto:llvmdev-bounces at cs.uiuc.edu] On Behalf Of David Blaikie Sent: 07 November 2013 19:15 To: Yin Ma Cc: llvmdev Dev Subject: Re: [LLVMdev] Should remove calling NULL pointer or not On Thu, Nov 7, 2013 at 11:02 AM, Yin Ma <yinma at codeaurora.org<mailto:yinma at codeaurora.org>> wrote: Hi John, It seems the dereferencing a NULL pointer is undefined behavior but Calling a function through a null pointer seems o.k. What is the well defined behavior of calling a null function pointer? If so , for this place, we need comment out the check. http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#232 look at Notes from the October 2003 meeting. 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. - David Yin From: John Criswell [mailto:criswell at illinois.edu<mailto:criswell at illinois.edu>] Sent: Wednesday, November 06, 2013 6:28 PM To: Yin Ma; 'llvmdev Dev' Subject: Re: [LLVMdev] Should remove calling NULL pointer or not On 11/6/13 6:36 PM, Yin Ma wrote: Hi, For a small case, that calls NULL pointer function. LLVM explicitly converts It to a store because it thinks it is not reachable like calling undefvalue. In InstCombineCalls.cpp:930 I think it is not a right approach because calling null pointer function Will segfault the program. Converting to a store will make program pass Silently. This changes the behavior of a program. So we need remove the case if (isa<ConstantPointerNull>(Callee) at InstCombineCalls.cpp:918 and treat calling Null pointer reachable. How do you think? Is there any reason that we should convert a calling null pointer to a store? 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. 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. -- John T. Thanks, Yin _______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu<mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev _______________________________________________ LLVM Developers mailing list LLVMdev at cs.uiuc.edu<mailto:LLVMdev at cs.uiuc.edu> http://llvm.cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131108/99743245/attachment.html>
Seemingly Similar Threads
- [LLVMdev] Should remove calling NULL pointer or not
- [LLVMdev] Should remove calling NULL pointer or not
- [LLVMdev] Should remove calling NULL pointer or not
- [LLVMdev] Should remove calling NULL pointer or not
- [LLVMdev] Suggestion About Adding Target Dependent Decision in LSR Please