Opened 4 years ago
Closed 4 years ago
#11538 closed defect (fixed)
BASE: ODR violations (-flto)
Reported by: | lacc97 | Owned by: | sev- |
---|---|---|---|
Priority: | normal | Component: | --Unset-- |
Version: | Keywords: | ||
Cc: | Game: |
Description
Compilation of 2.1.2 with -flto on Gentoo Linux (GCC 10.1) generates ODR warnings.
- engines/illusions
./engines/illusions/bbdou/bbdou_credits.h:35:8: warning: type ‘struct CreditsItem’ violates the C++ One Definition Rule [-Wodr] 35 | struct CreditsItem { | ^ ./engines/illusions/duckman/duckman_credits.h:32:8: note: a different type is defined in another translation unit 32 | struct CreditsItem { | ^ ./engines/illusions/bbdou/bbdou_credits.h:36:7: note: the first difference of corresponding definitions is field ‘isUsed’ 36 | bool isUsed; | ^ ./engines/illusions/duckman/duckman_credits.h:33:9: note: a field with different name is defined in another translation unit 33 | uint32 objectId; |
- audio
audio/fmopl.cpp:42: warning: ‘create’ violates the C++ One Definition Rule [-Wodr] 42 | OPL *create(Config::OplType type); | audio/alsa_opl.cpp:344: note: return value type mismatch 344 | OPL *create(Config::OplType type) { | audio/alsa_opl.cpp:47: note: type name ‘OPL::ALSA::OPL’ should match type name ‘OPL::OPL’ 47 | class OPL : public ::OPL::RealOPL { | ./engines/scumm/players/player_ad.h:32:7: note: the incompatible type is defined here 32 | class OPL; | ^ audio/alsa_opl.cpp:344: note: ‘create’ was previously declared here 344 | OPL *create(Config::OplType type) { | audio/alsa_opl.cpp:344: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used
As far as I can tell this doesn't result in runtime bugs but it is still undefined behaviour and may cause problems in the future.
Change History (2)
comment:1 by , 4 years ago
Summary: | ODR violations → BASE: ODR violations (-flto) |
---|
comment:2 by , 4 years ago
Owner: | set to |
---|---|
Resolution: | → fixed |
Status: | new → closed |
Note:
See TracTickets
for help on using tickets.
The first one was fixed, the second one is much trickier and is basically by design.
Thanks for reporting.