[LLVMdev] loads from a null address and optimizations
Bill Wendling
isanbard at gmail.com
Sat Sep 5 14:39:17 PDT 2009
Hi Zoltan,
We've come across this before where people meant to induce a trap by
dereferencing a null. It doesn't work for LLVM (as you found out).
Essentially, it's a valid transformation to turn this into
unreachable. The better solution is to use something like
__builtin_trap.
-bw
On Sep 5, 2009, at 2:19 PM, Zoltan Varga <vargaz at gmail.com> wrote:
>
> Hi,
>
> Currently, llvm treats the loads from a null address as
> unreachable code, i.e.:
> load i32* null
> is transformed by some optimization pass into
> unreachable
>
> This presents problems in JIT compilers like mono which implement
> null pointer checks by trapping SIGSEGV signals. It also
> looks incorrect since it changes program behavior, which might be
> undefined in general, but it is quite well defined on unix.
> Is there a way to prevent llvm from doing this besides marking all
> loads as volatile ?
>
> thanks
>
> Zoltan
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
More information about the llvm-dev
mailing list