struct SwitchRange and C++ One Definition Rule [-Wodr]
Kim Barrett
kim.barrett at oracle.com
Fri Jan 3 19:12:52 UTC 2020
> On Jan 3, 2020, at 10:49 AM, Baesken, Matthias <matthias.baesken at sap.com> wrote:
>
> Hello, when experimenting with gcc8 and the -flto compiler flag I was running into these warnings in the c1 coding :
>
>
> /open_jdk/jdk_3/jdk/src/hotspot/share/c1/c1_LIRGenerator.hpp:50:7: warning: type 'struct SwitchRange' violates the C++ One Definition Rule [-Wodr]
> class SwitchRange: public CompilationResourceObj {
> ^
> /open_jdk/jdk_3/jdk/src/hotspot/share/opto/parse2.cpp:319: note: a different type is defined in another translation unit
> class SwitchRange : public StackObj {
>
> /usr/work/d040975/open_jdk/jdk_3/jdk/src/hotspot/share/c1/c1_LIRGenerator.hpp:52:7: note: the first difference of corresponding definitions is field '_low_key'
> int _low_key;
> ^
> /open_jdk/jdk_3/jdk/src/hotspot/share/opto/parse2.cpp:321: note: a field with different name is defined in another translation unit
> jint _lo; // inclusive lower limit
>
>
>
> Do you think this should be fixed ( renaming one SwitchRange ) ?
>
> Martin suggested that even without flto added it could be problematic .
Yes, please file a bug and let's get this fixed quickly. This sort of thing can lead
to really weird looking problems, like using the same vtable (which one picked
“at random”) for instances of both classes.
More information about the hotspot-compiler-dev
mailing list