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. Richard. > Cheers, > Bingfeng > > >