RFR: 8366024: Remove unnecessary InstanceKlass::cast()

Ioi Lam iklam at openjdk.org
Fri Aug 22 23:51:22 UTC 2025


We have a lot of `InstanceKlass::cast(k)` calls where `k` is statically known to be an `InstanceKlass`. I fixed many instances of this pattern:


InstanceKlass* x = ....;
Klass* s = x->super(); // should call java_super()
InstanceKlass::cast(s)->xyz();


The `super()` method has a very confusing API. It has the return type of `Klass*` because for for an `ObjArrayKlass` like `[Ljava/lang/String;`:

- `super()` returns `[Ljava/lang/Object;`
- `java_super()` returns `Ljava/lang/Object;`

However, for `[Ljava/lang/Object;`, all `TypeArrayKlasses` and all `InstanceKlasses`, `super()` and `java_super()` return an identical value of that always have the actual type of `InstanceKlass*`.

See here about the difference between `super()` and `java_super()`: https://github.com/openjdk/jdk/blob/7b9969dc8f20989497ff617abb45543d182b684d/src/hotspot/share/oops/klass.hpp#L218-L221

Unfortunately, we have a lot of code that incorrectly uses `super()` instead of `java_super()`, which leads to ` InstanceKlass::cast()` calls. I tried to fixed a bunch of easy ones in this PR, although there are a few more to go.

I also fixed some calls to `local_interafaces()->at()` that widens the return type for `InstanceKlass*` to `Klass*`, which may lead to unnecessary  ` InstanceKlass::cast()` calls.

I also removed the `Klass::superklass()` API. This was used only in a few places and all of them can be safely replaced with `Klass::java_super()`.

To avoid confusion, I think we should rename `super()` to something more obvious, but let's do that in a future PR.

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

Commit messages:
 - Replace Klass::superklass() with Klass::java_super()
 - more fixes
 - 8366024: Remove unnecessary InstanceKlass::cast()

Changes: https://git.openjdk.org/jdk/pull/26908/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=26908&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8366024
  Stats: 98 lines in 15 files changed: 0 ins; 16 del; 82 mod
  Patch: https://git.openjdk.org/jdk/pull/26908.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/26908/head:pull/26908

PR: https://git.openjdk.org/jdk/pull/26908


More information about the hotspot-dev mailing list