Serious code generation/optimisation bug (I think)

Chris Lattner clattner@apple.com
Wed Jan 28 08:39:00 GMT 2009


On Jan 27, 2009, at 10:47 PM, Ian Lance Taylor wrote:
>>> Is LLVM smart enough to optimize that away, even when using shared
>>> libraries?
>>
>> Yes absolutely.  Just build with -fvisibility-hidden or use an export
>> map to say that my_null_pointer is not exported.  If it is static, it
>> will also do it at -O2.  This is not even a particularly aggressive
>> optimization.
>
> Sure, but the whole idea here is for the compiler to *not* know that
> the pointer has a zero value.  What I was really asking was whether
> LLVM would figure that out without taking any special action to
> restrict the visibility of the pointer.

I don't think that there is any smartness in assuming that.  I would  
claim that would be outrageously unsafe and incorrect to do that,  
unless the optimization is done at runtime or the user provides a flag  
with -fwhole-program.  Regardless, many people build their libraries  
with -fvisibility-hidden, and build settings are often not controlled  
by engineers hacking code.  It would be fragile to assume these aren't  
being set.

Laurent originally asked for a safe idiom for doing this "likely to  
work on most compilers without exotic compile flags in 2009".  The  
idiom won't work, because many compilers other than LLVM default to  
whole-program optimization at sufficiently high -O levels, and you  
presumably don't want to make fragile assumptions about what *other*  
flags are getting passed to your build.  He said nothing about  
libraries or where the code may end up.

I'm pretty sure that shared libraries are rare on systems without  
mmu's anyway.

-Chris



More information about the Gcc mailing list