On Fri, Jun 11, 2010 at 2:36 PM, Manuel López-Ibáñez
<lopeziba...@gmail.com> wrote:
> On 11 June 2010 14:23, Richard Guenther <richard.guent...@gmail.com> wrote:
>> On Fri, Jun 11, 2010 at 2:22 PM, Manuel López-Ibáñez
>> <lopeziba...@gmail.com> wrote:
>>> 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?
>>
>> No, you lied to the compiler by specifying -fwhole-file.
>
> I don't understand. The final link was the whole program.

GCC does not see the whole program if you didn't build all units
you are linking with -flto.

Richard.

> Manuel.
>

Reply via email to