RFR: 8279219: [REDO] C2 crash when allocating array of size too large

Roland Westrelin roland at openjdk.java.net
Tue Jan 4 08:58:33 UTC 2022


The new fix is largely similar to the previous one. 3 bugs were filed
because of the previous change but there are only really 2 issues:

- attaching the valid length condition at expansion time to the new
  array runtime call causes issues. With Shenandoah, passes of loop
  opts are executed after macro expansion but precedence edges are
  ignored when assigning controls to nodes which causes loop opts to
  incorrectly attempt to eliminate the node pointed to by the
  precedence edge. A similar issue occurs when the runtime call ends
  up in a subgraph that dies after macro expansion because the
  precedence edge is not cleared by dead code elimination which causes
  the runtime call to still be reachable. In the new patch, this is
  fixed by appending an extra input to the runtime call instead of
  using a precedence edge.

- In the previous patch, a top valid length input is used when there's
  no valid length input that needs to be recorded. That can cause an
  assert failure during CCP. If valid length initially has type top,
  the CatchNode out of the AllocateArray then have type (control,
  control). If next, the valid length input becomes constant 0, the
  CatchNode has type (top, control). An assert catches that the type
  of the CatchNode doesn't widen. This fixed by using 1 by default as
  valid length input and tweaking CatchNode::Value.

The new patch includes test cases for both issues.

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

Commit messages:
 - tests & fix
 - Revert "8279204: [BACKOUT] JDK-8278413: C2 crash when allocating array of size too large"

Changes: https://git.openjdk.java.net/jdk/pull/6952/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6952&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8279219
  Stats: 304 lines in 11 files changed: 229 ins; 53 del; 22 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6952.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6952/head:pull/6952

PR: https://git.openjdk.java.net/jdk/pull/6952


More information about the hotspot-compiler-dev mailing list