[LLVMdev] Should remove calling NULL pointer or not

Daniel Sanders Daniel.Sanders at imgtec.com
Fri Nov 8 03:08:13 PST 2013


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>


More information about the llvm-dev mailing list