Skip to content

Build fails with LTO #222

@eli-schwartz

Description

@eli-schwartz

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:

x86_64-pc-linux-gnu-g++ src/HexEditorGui.o src/FAL.o src/HexDialogs.o src/HexPanels.o src/HexEditorApp.o src/HexEditor.o src/HexEditorCtrl/HexEditorCtrl.o src/HexEditorCtrl/wxHexCtrl/TagDialogGui.o src/HexEditorCtrl/wxHexCtrl/wxHexCtrl.o src/HexEditorCtrl/wxHexCtrl/Tag.o src/HexEditorCtrl/HexEditorCtrlGui.o src/HexEditorFrame.o -Wl,-O1 -Wl,--as-needed -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing -Wl,--defsym=__gentoo_check_ldflags__=0 -fopenmp -lgomp -ludis86 -lmhash -march=native -fstack-protector-all -O2 -pipe -fdiagnostics-color=always -frecord-gcc-switches -flto=4 -Werror=odr -Werror=lto-type-mismatch -Werror=strict-aliasing  -Wformat -Werror=format-security  `wx-config --libs` `wx-config --libs aui` `wx-config --libs core` -o wxHexEditor
src/HexEditorFrame.h:65:7: error: type ‘struct HexEditorFrame’ violates the C++ One Definition Rule [-Werror=odr]
   65 | class HexEditorFrame : public HexEditorGui {
      |       ^
src/HexEditorFrame.h:65:7: note: a different type is defined in another translation unit
   65 | class HexEditorFrame : public HexEditorGui {
      |       ^
src/HexEditorFrame.h:97:31: note: the first difference of corresponding definitions is field ‘MyAUI’
   97 |                 wxAuiManager *MyAUI;
      |                               ^
src/HexEditorFrame.h:74:38: note: a field with different name is defined in another translation unit
   74 |                 wxFileSystemWatcher *file_watcher;
      |                                      ^
src/HexEditorFrame.h:72:34: error: type of ‘GetActiveHexEditor’ does not match original declaration [-Werror=lto-type-mismatch]
   72 |                 class HexEditor* GetActiveHexEditor(void);
      |                                  ^
src/HexEditorFrame.cpp:505:12: note: ‘GetActiveHexEditor’ was previously declared here
  505 | HexEditor* HexEditorFrame::GetActiveHexEditor( void ){
      |            ^
src/HexEditorFrame.cpp:505:12: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
src/HexEditorFrame.h:71:34: error: type of ‘OpenFile’ does not match original declaration [-Werror=lto-type-mismatch]
   71 |                 class HexEditor* OpenFile(wxFileName flname, bool openAtRight=false);
      |                                  ^
src/HexEditorFrame.cpp:445:12: note: ‘OpenFile’ was previously declared here
  445 | HexEditor* HexEditorFrame::OpenFile(wxFileName filename, bool openAtRight){
      |            ^
src/HexEditorFrame.cpp:445:12: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
lto1: some warnings being treated as errors
lto-wrapper: fatal error: x86_64-pc-linux-gnu-g++ returned 1 exit status
compilation terminated.
/usr/lib/gcc/x86_64-pc-linux-gnu/13/../../../../x86_64-pc-linux-gnu/bin/ld: error: lto-wrapper failed
collect2: error: ld returned 1 exit status
make: *** [Makefile:55: wxHexEditor] Error 1

Downstream report: https://bugs.gentoo.org/854414
Full build log: build.log

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions