Open eli-schwartz opened 2 months ago
error: type ‘…’ violates the C++ One Definition Rule [-Werror=odr]
This message can also be seen—as a warning—in the GitHub Actions logs for ubuntu-latest in this repository, which builds using gcc. Such a message is not seen in the macos-latest jobs; those use clang.
Yup -- clang is generally unable to diagnose this sort of thing as its LTO implementation doesn't retain the rich annotations gcc does.
can LTO be disabled in this instance?
Disabling LTO does not fix the issue whereby the C++ One Definition Rule is being broken resulting in Undefined Behavior.
Sure, you can not build with LTO. The bug is still there but then the compiler won't be able to warn you about the bug. Is that an improvement? I don't think so.
I tried to build with the following *FLAGS to optimize the build:
-flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing
Note the -Werror=* flags are used to help detect cases where the compiler tries to optimize by assuming UB cannot exist in the source code -- if it does exist, ordinarily the code would be miscompiled, and this says to make the miscompilation a fatal error.
I got this error:
Originally reported downstream: https://bugs.gentoo.org/927779 Full build log: build.log