struct SwitchRange and C++ One Definition Rule [-Wodr]
Baesken, Matthias
matthias.baesken at sap.com
Tue Jan 7 07:54:44 UTC 2020
Hi Kim, thanks for the feedback .
I opened :
8236709: struct SwitchRange in HS violates C++ One Definition Rule
https://bugs.openjdk.java.net/browse/JDK-8236709
Best regards, Matthias
> > 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_LIRGener
> ator.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