> **Problem:** when iterating over the cloned vtables, the original code > assumes that they are laid out consecutively in > memory. However, since > [JDK-8224509](https://bugs.openjdk.java.net/browse/JDK-8224509), the memory > allocated for each > of the the cloned vtables is now 8-byte aligned. This introduces gaps > between the cloned vtables, and causes the assert > to fail. > > **Fix:** the fix is to no longer assume the consecutive memory layout. > Instead, use the CppVtables::_index array to > access each individual cloned vtable. > > **Note:** I also cleaned up the code significantly. I feel the original code > is pretty hard to understand, so if I just > do the bare minimum to fix the bug, it will be pretty hard to review. > > I would suggest that the reviewers look at just the new version of the code > and see if it's working as described > (instead of looking at the diff to understand what the bug was and how it has > been fixed). > This version still uses the x-macro CPP_VTABLE_TYPES_DO to enumerate over the > classes whose vtables need to be cloned. > I plan to change that into templates in a future RFE.
Ioi Lam has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains three additional commits since the last revision: - Fixed more cases with align_up(xxx, SharedSpaceObjectAlignment) - Merge branch 'master' into 8254125-cppvtables-assert-on-win32 - 8254125: Assertion in cppVtables.cpp during builds on 32bit Windows ------------- Changes: - all: https://git.openjdk.java.net/jdk/pull/591/files - new: https://git.openjdk.java.net/jdk/pull/591/files/addaae99..50dfb2e2 Webrevs: - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=591&range=01 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=591&range=00-01 Stats: 6758 lines in 165 files changed: 3923 ins; 1067 del; 1768 mod Patch: https://git.openjdk.java.net/jdk/pull/591.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/591/head:pull/591 PR: https://git.openjdk.java.net/jdk/pull/591