[LLVMdev] loads from a null address and optimizations

Bill Wendling isanbard at gmail.com
Sat Sep 5 17:26:02 PDT 2009

It's essentially the sane thing. :-) I don't quite understand the  
code. Is 'v' ever assigned a value before 'v.Call()'?

Two options remain, from what I can see. Either mark v as volatile, or  
compile without optimizations. The second is more drastic.

If you *really* want it to perform a call on null. Then you could  
place a function in another module that only returns null, then do the  

// module A
typedef void (*func)();

func Foo() { return 0; }

// module B


And then make sure you don't perform LTO.


On Sep 5, 2009, at 4:59 PM, Zoltan Varga <vargaz at gmail.com> wrote:

> Hi,
>   I don't intentionally want to induce a tramp, the load null is  
> created by an llvm optimization
> pass from code like:
>    v = null;
>    .....
>    v.Call ();
>             Zoltan
> On Sat, Sep 5, 2009 at 11:39 PM, Bill Wendling <isanbard at gmail.com>  
> wrote:
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090905/91978212/attachment.html>

More information about the llvm-dev mailing list