[LLVMdev] global question

Andrew Haley aph at redhat.com
Sat Mar 7 12:09:57 PST 2009


Patrick Boettcher wrote:

> On Sat, 7 Mar 2009, John Regehr wrote:
>> Below is some C code and its LLVM translation (using a recent rev).  The
>> compiler goes ahead and loads from x in main, but it seems clear that a
>> constant propagation pass could have inferred that x is 0. 

I'm not sure I believe that, unless you're suggesting we treat main()
as special.

>> In fact that
>> is what happens if x is static, but in this case I cannot see how
>> external linkage of x would invalidate that optimization.
> 
> 
>> int x;
>>
>> int main (void)
>> {
>>   return x;
>> }
>>
> 
> Please correct me if I'm wrong, but how can the compiler know, that x is not 
> initialized in another file which defines x as extern? It can only be sure, 
> when x is declared static.
> 
> So, for me the LLVM-code is right.
> 
> (I even remember someone, that it is platform specific whether x is initialized 
> to 0 or not... or was it a question of C89 or C99?)

It's initialized to zero.  Always, for all versions of C.

Andrew.



More information about the llvm-dev mailing list