Merge
This commit is contained in:
commit
2a78aba488
@ -546,13 +546,18 @@ JRT_ENTRY_NO_ASYNC(static address, exception_handler_for_pc_helper(JavaThread* t
|
|||||||
// normal bytecode execution.
|
// normal bytecode execution.
|
||||||
thread->clear_exception_oop_and_pc();
|
thread->clear_exception_oop_and_pc();
|
||||||
|
|
||||||
|
Handle original_exception(thread, exception());
|
||||||
|
|
||||||
continuation = SharedRuntime::compute_compiled_exc_handler(nm, pc, exception, false, false);
|
continuation = SharedRuntime::compute_compiled_exc_handler(nm, pc, exception, false, false);
|
||||||
// If an exception was thrown during exception dispatch, the exception oop may have changed
|
// If an exception was thrown during exception dispatch, the exception oop may have changed
|
||||||
thread->set_exception_oop(exception());
|
thread->set_exception_oop(exception());
|
||||||
thread->set_exception_pc(pc);
|
thread->set_exception_pc(pc);
|
||||||
|
|
||||||
// the exception cache is used only by non-implicit exceptions
|
// the exception cache is used only by non-implicit exceptions
|
||||||
if (continuation != NULL) {
|
// Update the exception cache only when there didn't happen
|
||||||
|
// another exception during the computation of the compiled
|
||||||
|
// exception handler.
|
||||||
|
if (continuation != NULL && original_exception() == exception()) {
|
||||||
nm->add_handler_for_exception_and_pc(exception, pc, continuation);
|
nm->add_handler_for_exception_and_pc(exception, pc, continuation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
|
*
|
||||||
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License version 2 only, as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
* version 2 for more details (a copy is included in the LICENSE file that
|
||||||
|
* accompanied this code).
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License version
|
||||||
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||||
|
* or visit www.oracle.com if you need additional information or have any
|
||||||
|
* questions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 8054224
|
||||||
|
* @summary Recursive method compiled by C1 is unable to catch StackOverflowError
|
||||||
|
* @run main/othervm -Xcomp -XX:CompileOnly=Test.run -XX:+TieredCompilation -XX:TieredStopAtLevel=2 -Xss256K TestRecursiveReplacedException
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class TestRecursiveReplacedException {
|
||||||
|
|
||||||
|
public static void main(String args[]) {
|
||||||
|
new TestRecursiveReplacedException().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
run();
|
||||||
|
} catch (Throwable t) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user