Bug 46905 - -flto -fno-lto does not disable lto
Summary: -flto -fno-lto does not disable lto
Alias: None
Product: gcc
Classification: Unclassified
Component: lto (show other bugs)
Version: 4.6.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
Depends on:
Reported: 2010-12-12 13:50 UTC by Andi Kleen
Modified: 2011-10-07 05:43 UTC (History)
1 user (show)

See Also:
Known to work:
Known to fail:
Last reconfirmed:


Note You need to log in before you can comment on or make changes to this bug.
Description Andi Kleen 2010-12-12 13:50:36 UTC
gcc -flto -fno-lto hello.c generates LTO objects. It should not.

In large makefiles it's often convenient to use -fno... to disable
something for only specific files.
Comment 1 Andi Kleen 2010-12-12 14:19:00 UTC
Same bug seems to be in the code generating phase

gcc -O2 -flto -fno-lto object.o

does code generation even if object.o has fallback code
Comment 2 Richard Biener 2010-12-16 14:36:44 UTC
I suppose using the linker plugin shows similar effects at link stage?  I think
this is a specs issue, the driver passes on -flto* if -fno-lto was on the
Comment 3 ak 2010-12-19 19:36:29 UTC
Author: ak
Date: Sun Dec 19 19:36:25 2010
New Revision: 168071

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=168071
Fix -fno-lto (PR lto/46905)


2010-12-19  Andi Kleen	<ak@linux.intel.com>

	PR lto/46905
	* collect2.c (main): Handle -fno-lto.
	* opts.c (common_handle_option): Handle -fno-lto.

Comment 4 Jan Hubicka 2011-01-08 20:59:58 UTC
Linker plugin has also problem of doing LTO even when not asked for.  I will look into it once slib LTO bits are settled.
Comment 5 Andi Kleen 2011-01-08 23:16:25 UTC
slim lto will take some time (next stage1)
i also plan to drop most of the code because with forced plugin
the elf code in collect2 should not be needed anymore.
Comment 6 Andi Kleen 2011-01-08 23:56:48 UTC
And to add: if you have more fixes for -fno-lto please add them now,
don't wait.
Comment 7 Jan Hubicka 2011-01-09 01:10:25 UTC
> slim lto will take some time (next stage1)

I was chatting about this with Diego yesterday and he seems to be fine with the
basic slim LTO patch getting in.  So it seems to me that we might get the slim
LTO patch for 4.6.0 and flip the default for 4.7.0

> i also plan to drop most of the code because with forced plugin
> the elf code in collect2 should not be needed anymore.

I don't know.  Current collect2 code is utterly broken by using wrong symbol
table at first place. With GNU LD getting plugin support the situation got
better, but we still have darwin target where we have no linker support at all.
Apple linker has plugin, so probably one can write plugin glue, but until that
happens, we probably want to keep collect2 path somehow useable.

What I am aware of WRT plugin and LTO is that currently plugin force LTO by
default. I.e.

gcc -flto t.c -c
gcc t.o
will result in WHOPR while producing a.out
I ended up enabling plugin by defualt since that is a must for plugin, but plugin
should be extended to work out whether -flto was passed on the command line (or
be better told by the driver as we don't want to duplicate parsing everywhere)
and when lto is not passed do not claim objects that are not slim.

Comment 8 Andi Kleen 2011-10-07 05:43:55 UTC
AFAIK this works now.