https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93369
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |marxin at gcc dot gnu.org --- Comment #16 from Martin Liška <marxin at gcc dot gnu.org> --- I see the ODR warning being properly printed: g++ pr64076_0.o pr64076_1.o pr64076.H:10:8: warning: type ‘struct S’ violates the C++ One Definition Rule [-Wodr] 10 | struct S : public X, public Y, public Z | ^ pr64076.H:10:8: note: a type with the same name but different number of polymorphic bases is defined in another translation unit 10 | struct S : public X, public Y, public Z | ^ pr64076.H:8:8: note: the extra base is defined here 8 | struct T : public Base { }; | ^ pr64076.H:15:8: warning: type of ‘f’ does not match original declaration [-Wlto-type-mismatch] 15 | void f() | ^ pr64076_1.C:5:6: note: ‘f’ was previously declared here 5 | void S::f() { } | ^ pr64076_1.C:5:6: note: code may be misoptimized unless ‘-fno-strict-aliasing’ is used I agree with Honza that it's not P1.