# HG changeset patch # User jcm # Date 1508850416 25200 # Node ID bba11a95e9274387a69847fa89e725d70b6ecf72 # Parent 3d1e3786d66eed11094ef5594606db0d15875c7a 8168712: [AOT] assert(false) failed: DEBUG MESSAGE: InterpreterMacroAssembler::call_VM_base: last_sp != NULL Summary: skip the assert for this specific case, as it is not an issue. Reviewed-by: coleenp, dlong, kvn diff -r 3d1e3786d66e -r bba11a95e927 src/hotspot/cpu/aarch64/templateTable_aarch64.cpp --- a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp Mon Sep 04 19:50:01 2017 +0200 +++ b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp Tue Oct 24 06:06:56 2017 -0700 @@ -2195,6 +2195,13 @@ __ bind(skip_register_finalizer); } + // Explicitly reset last_sp, for handling special case in TemplateInterpreter::deopt_reexecute_entry +#ifdef ASSERT + if (state == vtos) { + __ str(zr, Address(rfp, frame::interpreter_frame_last_sp_offset * wordSize)); + } +#endif + // Issue a StoreStore barrier after all stores but before return // from any constructor for any class with a final field. We don't // know if this is a finalizer, so we always do so. diff -r 3d1e3786d66e -r bba11a95e927 src/hotspot/cpu/arm/templateTable_arm.cpp --- a/src/hotspot/cpu/arm/templateTable_arm.cpp Mon Sep 04 19:50:01 2017 +0200 +++ b/src/hotspot/cpu/arm/templateTable_arm.cpp Tue Oct 24 06:06:56 2017 -0700 @@ -2844,6 +2844,19 @@ __ bind(skip_register_finalizer); } + // Explicitly reset last_sp, for handling special case in TemplateInterpreter::deopt_reexecute_entry +#ifdef ASSERT + if (state == vtos) { +#ifndef AARCH64 + __ mov(Rtemp, 0); + __ str(Rtemp, Address(FP, frame::interpreter_frame_last_sp_offset * wordSize)); +#else + __ restore_sp_after_call(Rtemp); + __ restore_stack_top(); +#endif + } +#endif + // Narrow result if state is itos but result type is smaller. // Need to narrow in the return bytecode rather than in generate_return_entry // since compiled code callers expect the result to already be narrowed. diff -r 3d1e3786d66e -r bba11a95e927 src/hotspot/cpu/x86/templateTable_x86.cpp --- a/src/hotspot/cpu/x86/templateTable_x86.cpp Mon Sep 04 19:50:01 2017 +0200 +++ b/src/hotspot/cpu/x86/templateTable_x86.cpp Tue Oct 24 06:06:56 2017 -0700 @@ -2563,6 +2563,13 @@ __ bind(skip_register_finalizer); } + // Explicitly reset last_sp, for handling special case in TemplateInterpreter::deopt_reexecute_entry +#ifdef ASSERT + if (state == vtos) { + __ movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD); + } +#endif + // Narrow result if state is itos but result type is smaller. // Need to narrow in the return bytecode rather than in generate_return_entry // since compiled code callers expect the result to already be narrowed. diff -r 3d1e3786d66e -r bba11a95e927 test/hotspot/jtreg/compiler/runtime/Test8168712.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/hotspot/jtreg/compiler/runtime/Test8168712.java Tue Oct 24 06:06:56 2017 -0700 @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2017, 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 + * @requires vm.simpleArch == "x64" & vm.debug + * @bug 8168712 + * + * @run main/othervm -XX:CompileCommand=compileonly,Test8168712.* -XX:CompileCommand=compileonly,*Object.* -XX:+DTraceMethodProbes -XX:-UseOnStackReplacement -XX:+DeoptimizeRandom compiler.runtime.Test8168712 + */ +package compiler.runtime; + +import java.util.*; + +public class Test8168712 { + static HashSet m = new HashSet<>(); + public static void main(String args[]) { + int i = 0; + while (i++<15000) { + test(); + } + } + static Test8168712 test() { + return new Test8168712(); + } + protected void finalize() { + m.add(this); + } +}