diff --git a/src/share/vm/opto/loopopts.cpp b/src/share/vm/opto/loopopts.cpp index d0a94b4c26501465fd17b01bd9fba1dda8ba5c10..6535c552907f631c58f973a821ab6e18f4cae512 100644 --- a/src/share/vm/opto/loopopts.cpp +++ b/src/share/vm/opto/loopopts.cpp @@ -29,6 +29,11 @@ //------------------------------split_thru_phi--------------------------------- // Split Node 'n' through merge point if there is enough win. Node *PhaseIdealLoop::split_thru_phi( Node *n, Node *region, int policy ) { + if (n->Opcode() == Op_ConvI2L && n->bottom_type() != TypeLong::LONG) { + // ConvI2L may have type information on it which is unsafe to push up + // so disable this for now + return NULL; + } int wins = 0; assert( !n->is_CFG(), "" ); assert( region->is_Region(), "" ); diff --git a/test/compiler/6659207/Test.java b/test/compiler/6659207/Test.java new file mode 100644 index 0000000000000000000000000000000000000000..3c729758ef473ed24b47a12fc61fdbdade6329c9 --- /dev/null +++ b/test/compiler/6659207/Test.java @@ -0,0 +1,60 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +/* + * @test + * @bug 6659207 + * @summary access violation in CompilerThread0 + */ + +public class Test { + static int[] array = new int[12]; + + static int index(int i) { + if (i == 0) return 0; + for (int n = 0; n < array.length; n++) + if (i < array[n]) return n; + return -1; + } + + static int test(int i) { + int result = 0; + i = index(i); + if (i >= 0) + if (array[i] != 0) + result++; + + if (i != -1) + array[i]++; + + return result; + } + + public static void main(String[] args) { + int total = 0; + for (int i = 0; i < 100000; i++) { + total += test(10); + } + System.out.println(total); + } +}