RFR: 8300590: [JVMCI] BytecodeFrame.equals is broken

Dean Long dlong at openjdk.org
Fri Jan 20 04:01:33 UTC 2023


On Wed, 18 Jan 2023 21:39:57 GMT, Doug Simon <dnsimon at openjdk.org> wrote:

> `BytecodeFrame.equals` returns true even when the frames are found to be not equal: https://github.com/openjdk/jdk/blob/7bf0d1465e73d83aae30f1cd9fd318af9e9c1b70/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.code/src/jdk/vm/ci/code/BytecodeFrame.java#L375
> 
> This PR fixes that, adds a test and improves both `BytecodeFrame.hashCode` and `BytecodeFrame.equals` to take all fields into account.
> 
> Given the nature of the bug in `BytecodeFrame.equals` that this PR fixes, it's pretty clear that `BytecodeFrame` has never been (reliably) used as a key in a map.

src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.code/src/jdk/vm/ci/code/BytecodeFrame.java line 374:

> 372:         }
> 373:         if (getClass() != obj.getClass()) {
> 374:             return false;

Is this comparison better/faster than instanceof, and allows the compiler to avoid repeating the same check on the checkcast below?

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

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


More information about the hotspot-compiler-dev mailing list