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

Roland Westrelin roland at openjdk.java.net
Tue Jan 11 13:48:13 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.

Roland Westrelin has updated the pull request incrementally with one additional commit since the last revision:

  review

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

Changes:
  - all: https://git.openjdk.java.net/jdk/pull/6952/files
  - new: https://git.openjdk.java.net/jdk/pull/6952/files/af41b3be..b3cafb1d

Webrevs:
 - full: https://webrevs.openjdk.java.net/?repo=jdk&pr=6952&range=01
 - incr: https://webrevs.openjdk.java.net/?repo=jdk&pr=6952&range=00-01

  Stats: 8 lines in 3 files changed: 0 ins; 1 del; 7 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