[LLVMdev] Should remove calling NULL pointer or not
Philip Reames
listmail at philipreames.com
Mon Nov 11 12:01:50 PST 2013
I've definitely seen code like the following in various production code
bases:
namespace {
bool global = false;
}
class Foo {
void modify_global() { global = true; }
};
// usually, there's a layer of indirection (or two, or three) here
((Foo*)NULL)->modify_global();
Discussions on StackOverflow seem to clearly indicate that the above
code is undefined. Having said that, I have not tried to parse apart
the actual spec on this one, so I'll leave that discussion to others.
If we do decide this is undefined, do we have a general policy on how to
warn about, or under which optimization levels to enable, such
optimizations? If not, it would probably worth some discussion on what
a general policy might look like.
Philip
On 11/6/13 4: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?
>
> 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/20131111/a5fa4f06/attachment.html>
More information about the llvm-dev
mailing list