RFR: 8356942: invokeinterface Throws AbstractMethodError Instead of IncompatibleClassChangeError [v2]
David Holmes
dholmes at openjdk.org
Tue Jul 8 07:10:24 UTC 2025
> In [JDK-8186092](https://bugs.openjdk.org/browse/JDK-8186092) (way back in JDK 10) we elided loader constraint checks for overpass methods related to default methods by skipping them when initializing the itable for the interface. But that was the wrong thing to do. The overpass method is setup when there is a resolution/selection error so that the correct exception is thrown if the problematic method is invoked (like the ICCE reporting conflicting methods) and by eliding that entry we instead get the `AbstractMethhodError`.
>
> The fix here is to revert that change from [JDK-8186092](https://bugs.openjdk.org/browse/JDK-8186092), and to address the loader constraint problem by adding the same check for overpass methods in `klassItable::check_constraints` that exists for `klassVtable::check_constraints`.
>
> Testing:
> - new regression test
> - tiers 1-4
>
> Thanks
>
> PS. The diff is much smaller if you disable whitespace differences.
David Holmes has updated the pull request incrementally with one additional commit since the last revision:
Replaced new test by updating existing defmeth case that was missing the invokeinterface variants of the
test scenario. Also updated all tests therein to use `throwsExact` so that the wrong kind of ICCE does not
cause the test to pass by mistake.
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/26122/files
- new: https://git.openjdk.org/jdk/pull/26122/files/5e49c497..29883542
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=26122&range=01
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=26122&range=00-01
Stats: 185 lines in 6 files changed: 8 ins; 154 del; 23 mod
Patch: https://git.openjdk.org/jdk/pull/26122.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/26122/head:pull/26122
PR: https://git.openjdk.org/jdk/pull/26122
More information about the hotspot-dev
mailing list