On 11 June 2010 14:07, Richard Guenther <richard.guent...@gmail.com> wrote: > On Fri, Jun 11, 2010 at 2:04 PM, Bingfeng Mei <b...@broadcom.com> wrote: >> Hi, >> >> I am still puzzled by the effect of LTO/-fwhole-program. >> For the following simple tests: >> >> a.c: >> >> #include <stdio.h> >> int v; >> >> extern void bar(); >> int main() >> { >> v = 5; >> bar(); >> >> printf("v = %d\n", v); >> return 0; >> } >> >> b.c: >> int v; >> void bar() >> { >> v = 4; >> } >> >> If I just compile plainly, the output is: >> v = 4 >> >> If I compile as: >> ~/work/install-x86/bin/gcc a.c -O2 -c -save-temps -flto >> ~/work/install-x86/bin/gcc b.c -O2 -c -save-temps >> ~/work/install-x86/bin/gcc a.o b.o -O2 -fuse-linker-plugin -o f -flto >> -fwhole-program >> >> The output is: >> v = 5 >> >> We get two copies of v here. One is converted to static by whole-program >> optimizer, >> and the other is global. I know I can add externally_visible in a.c to solve >> the issue. But since compiler is not able to give any warning here, it >> could make >> program very tricky to debug. >> >> What is the value to convert variables to static ones? I know unreferenced >> ones can >> be optimized out, but this can be achieved by -fdata-sections & >> -gc-collection as >> well, I believe. > > You make inter-procedural/file data-flow operations possible.
But this is a bug, isn't it? Cheers, Manuel.