changeset 8696:5c1f180db165 jdk8u172-b08

Merge
author asaha
date Tue, 27 Feb 2018 11:36:15 -0800
parents 3ff20f44b8d1 4fefe015a728
children 8e75ba18e9f3
files .hgtags
diffstat 4 files changed, 38 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Tue Feb 20 13:11:03 2018 -0800
+++ b/.hgtags	Tue Feb 27 11:36:15 2018 -0800
@@ -1139,6 +1139,7 @@
 08326a76b14888908523cf2bb1105de63b43544d jdk8u171-b05
 4e1445535b6d9c25ed34aba2768139da283847d0 jdk8u171-b06
 fd0e42431b94c889b3fea8d8aad048f51d559761 jdk8u171-b07
+56123fdca84a3b253b8ea6f72be85bd2ebf39fd0 jdk8u171-b08
 f299cf0b7baea1ae85f139f97adb9ab5499f402a jdk8u172-b00
 d10254debf7c1342416062bf1ba5258f16a8ce00 jdk8u172-b01
 653d9e0cd3f4023675c9eece7f0d563287f1d34f jdk8u172-b02
--- a/src/cpu/zero/vm/methodHandles_zero.cpp	Tue Feb 20 13:11:03 2018 -0800
+++ b/src/cpu/zero/vm/methodHandles_zero.cpp	Tue Feb 27 11:36:15 2018 -0800
@@ -180,3 +180,9 @@
     return NULL;
   }
 }
+
+#ifndef PRODUCT
+void MethodHandles::trace_method_handle(MacroAssembler* _masm, const char* adaptername) {
+  // This is just a stub.
+}
+#endif //PRODUCT
--- a/src/share/vm/interpreter/bytecodeInterpreter.cpp	Tue Feb 20 13:11:03 2018 -0800
+++ b/src/share/vm/interpreter/bytecodeInterpreter.cpp	Tue Feb 27 11:36:15 2018 -0800
@@ -2569,13 +2569,35 @@
 
         // this could definitely be cleaned up QQQ
         Method* callee;
-        Klass* iclass = cache->f1_as_klass();
-        // InstanceKlass* interface = (InstanceKlass*) iclass;
+        Method *interface_method = cache->f2_as_interface_method();
+        InstanceKlass* iclass = interface_method->method_holder();
+
         // get receiver
         int parms = cache->parameter_size();
         oop rcvr = STACK_OBJECT(-parms);
         CHECK_NULL(rcvr);
         InstanceKlass* int2 = (InstanceKlass*) rcvr->klass();
+
+        // Receiver subtype check against resolved interface klass (REFC).
+        {
+          Klass* refc = cache->f1_as_klass();
+          itableOffsetEntry* scan;
+          for (scan = (itableOffsetEntry*) int2->start_of_itable();
+               scan->interface_klass() != NULL;
+               scan++) {
+            if (scan->interface_klass() == refc) {
+              break;
+            }
+          }
+          // Check that the entry is non-null.  A null entry means
+          // that the receiver class doesn't implement the
+          // interface, and wasn't the same as when the caller was
+          // compiled.
+          if (scan->interface_klass() == NULL) {
+            VM_JAVA_ERROR(vmSymbols::java_lang_IncompatibleClassChangeError(), "", note_no_trap);
+          }
+        }
+
         itableOffsetEntry* ki = (itableOffsetEntry*) int2->start_of_itable();
         int i;
         for ( i = 0 ; i < int2->itable_length() ; i++, ki++ ) {
@@ -2587,7 +2609,8 @@
         if (i == int2->itable_length()) {
           VM_JAVA_ERROR(vmSymbols::java_lang_IncompatibleClassChangeError(), "", note_no_trap);
         }
-        int mindex = cache->f2_as_index();
+        int mindex = interface_method->itable_index();
+
         itableMethodEntry* im = ki->first_method_entry(rcvr->klass());
         callee = im[mindex].method();
         if (callee == NULL) {
--- a/test/gc/metaspace/CompressedClassSpaceSizeInJmapHeap.java	Tue Feb 20 13:11:03 2018 -0800
+++ b/test/gc/metaspace/CompressedClassSpaceSizeInJmapHeap.java	Tue Feb 27 11:36:15 2018 -0800
@@ -37,6 +37,11 @@
 
 public class CompressedClassSpaceSizeInJmapHeap {
     public static void main(String[] args) throws Exception {
+        if (!Platform.shouldSAAttach()) {
+            System.out.println("SA attach not expected to work - test skipped.");
+            return;
+        }
+
         String pid = Integer.toString(ProcessTools.getProcessId());
 
         JDKToolLauncher jmap = JDKToolLauncher.create("jmap")