**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. ------------- Commit messages: - 8254125: Assertion in cppVtables.cpp during builds on 32bit Windows Changes: https://git.openjdk.java.net/jdk/pull/591/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=591&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8254125 Stats: 136 lines in 5 files changed: 18 ins; 59 del; 59 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