Relates :
|
|
Relates :
|
|
Relates :
|
Following test case: import java.util.Arrays; public class RangeCheckEliminationScaleNotOne { public static void main(String[] args) { { int[] array = new int[199]; boolean[] flags = new boolean[100]; Arrays.fill(flags, true); flags[0] = false; flags[1] = false; for (int i = 0; i < 20_000; i++) { test1(100, array, 0, flags); } boolean ex = false; try { test1(100, array, -5, flags); } catch (ArrayIndexOutOfBoundsException aie) { ex = true; } if (!ex) { throw new RuntimeException("no AIOOB exception"); } } } private static int test1(int stop, int[] array, int offset, boolean[] flags) { if (array == null) {} int res = 0; for (int i = 0; i < stop; i++) { if (flags[i]) { res += array[2 * i + offset]; } } return res; } } ran with: java -XX:-BackgroundCompilation -XX:-TieredCompilation -XX:-UseOnStackReplacement -XX:CompileOnly=RangeCheckEliminationScaleNotOne::test1 -XX:LoopMaxUnroll=1 -XX:-UseLoopPredicate RangeCheckEliminationScaleNotOne either: - fails with same error as JDK-8211698 or with fix suggested: https://bugs.openjdk.java.net/browse/JDK-8211698?focusedCommentId=14229219&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-14229219 - segfaults because of an out of bound access Given how old this code is, and while I haven't verified, it's likely to affect all versions since at least 8.
|