This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Issue with LTO/-fwhole-program


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. 

Cheers,
Bingfeng



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]