[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