RFR: 8255936: "parsing found no loops but there are some" assertion failure with Shenandoah

Roland Westrelin roland at openjdk.java.net
Thu Nov 5 08:50:00 UTC 2020


This is a Shenandoah bug but the proposed fix is in shared code.

In an infinite loop, a barrier is located right after the loop head
and above the never branch. When the barrier is expanded, control flow
is added between the loop and the never branch. During loop
verification the assert fires because it doesn't expect any control
flow between the never branch and the loop head.

While it would have been nice to fix this Shenandoah issue in
Shenandoah code, I think the cleaner fix is to preserve the invariant
that the never branch is always right after the loop head in an
infinite loop. In the proposed patch, this is achieved by moving all
uses of the loop head to the never branch when it's constructed.

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

Commit messages:
 - fix & test

Changes: https://git.openjdk.java.net/jdk/pull/1073/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=1073&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8255936
  Stats: 13 lines in 2 files changed: 6 ins; 5 del; 2 mod
  Patch: https://git.openjdk.java.net/jdk/pull/1073.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/1073/head:pull/1073

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


More information about the shenandoah-dev mailing list