Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
|
Relates :
|
Code in PhiNode::unique_input() causes CastPPs to be eliminated and can result in dependency of a load on a null check to be lost. Here is an example test case: public class TestEliminatedCastPP { static TestEliminatedCastPP saved; static TestEliminatedCastPP saved_not_null; int f; static int test(TestEliminatedCastPP obj, int[] array, boolean flag) { int ret = array[0] + array[20]; saved = obj; if (obj == null) { return ret; } saved_not_null = obj; int i = 0; for (; i < 10; i++); ret += array[i]; TestEliminatedCastPP res; if (flag) { res = saved; } else { res = saved_not_null; } return ret + res.f; } static public void main(String[] args) { int[] array = new int[100]; TestEliminatedCastPP obj = new TestEliminatedCastPP(); for (int i = 0; i < 20000; i++) { test(obj, array, (i%2) == 0); } test(null, array, true); } } Crashes on sparc with: -XX:+StressGCM ILW=H(crash)L(never seen in the wild, requires stress option)H(none)=P2
|