RFR: 8253555: Make ByteSize and WordSize typed scoped enums

Stefan Karlsson stefank at openjdk.java.net
Thu Sep 24 06:29:30 UTC 2020


It's a common bug in HotSpot that byte values are used when the code asks for words, and vice versa. One attempt to
prevent that has been to use the classes ByteSize and WordSize, to make the compiler detect these problems. The current
implementation is a bit problematic, because both types are int typedefs in release builds, and wrapper classes in
debug builds. This means that we can't use these types in overload resolution. I propose that we fix that by changing
the type to scoped enums with a fixed int type. The compiler will then be apple to completely separate ByteSize,
WordSize, and ints. We also don't need different code in release vs debug builds.

FWIW, I once created a size_t versions of these classes and annotated all the metaspace code with these types. This
experiment flushed out a handful of bugs (some of them were known and the reason for trying that experiment)

There are some controversy about having these classes around. See for example:
JDK-8041956: remove ByteSize and WordSize classes

I hope we can stay away from that discussion in this PR.

-------------

Commit messages:
 - 8253555: Make ByteSize and WordSize typed scoped enums

Changes: https://git.openjdk.java.net/jdk/pull/328/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=328&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8253555
  Stats: 188 lines in 8 files changed: 17 ins; 157 del; 14 mod
  Patch: https://git.openjdk.java.net/jdk/pull/328.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/328/head:pull/328

PR: https://git.openjdk.java.net/jdk/pull/328


More information about the hotspot-dev mailing list