**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

Reply via email to