<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">FTR, here's a test case I just minimized. It may be related to some of the failures we've been seeing.<div><br></div><div>-- John<br><div><br></div><div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;">/*</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> Minimized test case for stack walking bug.</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> JVM crash occurs when compiled code calls DMH to compiled code.</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br></span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> To reproduce:</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br></span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> $JAVA7X_HOME/bin/javac -XDinvokedynamic $BUGDIR/ThrowBug.java</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> $JAVA7X_HOME/bin/java -Xbatch -XX:+PrintCompilation -XX:+EnableMethodHandles -cp $BUGDIR ThrowBug</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br></span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> continues to reproduce with -XX:CompileCommand=compileonly,ThrowBug.* (2 methods compiled only)</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> */</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br></span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;">import java.dyn.*;</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;">import static java.dyn.MethodHandles.*;</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br></span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;">class ThrowBug {</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> public static void main(String... av) throws Throwable {</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> for (int i = 0; i < 10001; i++) {</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> catcher(THROWER);</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> }</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> System.out.println("catches="+catches);</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> }</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br></span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> static final Exception blintz = new ClassCastException("blintz");</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> static Object thrower() throws Throwable {</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> throw blintz; // food fight!!</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> }</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> static final MethodHandle THROWER</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> = lookup().findStatic(ThrowBug.class, "thrower", methodType(Object.class));</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"><br></span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> static Object catcher(MethodHandle thrower) {</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> try {</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> return THROWER.invoke();</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> } catch (Throwable ex) {</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> catches++;</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> return null;</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> }</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> }</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;"> static int catches;</span></font></div><div><font class="Apple-style-span" face="'Lucida Sans Typewriter'" size="3"><span class="Apple-style-span" style="font-size: 12px;">}</span></font></div><div><br></div></div></div></body></html>