Issue with LTO/-fwhole-program
David Brown
david.brown@hesbynett.no
Sat Jun 12 15:15:00 GMT 2010
Ian Lance Taylor wrote:
> Manuel López-Ibáñez <lopezibanez@gmail.com> writes:
>
>> This also means that linking your program with non-LTO+whole-program
>> code may lead to miscompilations without any warning, which is really
>> bad. I don't think it is a reasonable limitation and we will get bad
>> press when programs start breaking for users. They won't care (and
>> they won't even listen) about the reasons. The conclusion will be: LTO
>> is broken in GCC, and just use another compiler.
>
> The limitation isn't all that bad. If you want to use
> -fwhole-program, I think the basic rule is this: compile all your code
> with -flto, and don't define variables or functions which are
> referenced by any code which is not yours.
>
> I think adding a warning for this case would be great, if we can
> figure out how to do it. But I also think that a clear statement in
> the documentation will avoid most user problems.
>
> Ian
>
To me, this sounds like you are safe as long as you stick to the "one
definition rule". This is a requirement for C++ - the original example
with "int v" definitions in two files would be illegal in C++, while it
is legal in C.
Assuming I'm correct here, then perhaps there could be a warning or
error message that is triggered by breaking the ODR, and which could be
enabled automatically by the -flto flag. Perhaps existing checking
mechanisms from C++ can be used here.
David
More information about the Gcc
mailing list