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]

Re: Issue with LTO/-fwhole-program


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


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