Merge
authordcubed
Fri, 19 Apr 2013 13:48:54 -0700
changeset 17027 a90d04b17b94
parent 17021 ea30b4c302b9 (current diff)
parent 17025 1cabc279ba46 (diff)
child 17028 8972029d19a0
Merge
--- a/hotspot/src/share/vm/classfile/classFileParser.cpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/classfile/classFileParser.cpp	Fri Apr 19 13:48:54 2013 -0700
@@ -436,14 +436,19 @@
               ref_index, CHECK_(nullHandle));
             break;
           case JVM_REF_invokeVirtual:
-          case JVM_REF_invokeStatic:
-          case JVM_REF_invokeSpecial:
           case JVM_REF_newInvokeSpecial:
             check_property(
               tag.is_method(),
               "Invalid constant pool index %u in class file %s (not a method)",
               ref_index, CHECK_(nullHandle));
             break;
+          case JVM_REF_invokeStatic:
+          case JVM_REF_invokeSpecial:
+            check_property(
+               tag.is_method() || tag.is_interface_method(),
+               "Invalid constant pool index %u in class file %s (not a method)",
+               ref_index, CHECK_(nullHandle));
+             break;
           case JVM_REF_invokeInterface:
             check_property(
               tag.is_interface_method(),
@@ -3837,7 +3842,7 @@
     }
 
     if (TraceClassLoadingPreorder) {
-      tty->print("[Loading %s", name->as_klass_external_name());
+      tty->print("[Loading %s", (name != NULL) ? name->as_klass_external_name() : "NoName");
       if (cfs->source() != NULL) tty->print(" from %s", cfs->source());
       tty->print_cr("]");
     }
--- a/hotspot/src/share/vm/classfile/genericSignatures.cpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/classfile/genericSignatures.cpp	Fri Apr 19 13:48:54 2013 -0700
@@ -268,8 +268,15 @@
     Klass* outer = SystemDictionary::find(
         outer_name, class_loader, protection_domain, CHECK_NULL);
     if (outer == NULL && !THREAD->is_Compiler_thread()) {
-      outer = SystemDictionary::resolve_super_or_fail(original_name,
-          outer_name, class_loader, protection_domain, false, CHECK_NULL);
+      if (outer_name == ik->super()->name()) {
+        outer = SystemDictionary::resolve_super_or_fail(original_name, outer_name,
+                                                        class_loader, protection_domain,
+                                                        false, CHECK_NULL);
+      }
+      else {
+        outer = SystemDictionary::resolve_or_fail(outer_name, class_loader,
+                                                  protection_domain, false, CHECK_NULL);
+      }
     }
 
     InstanceKlass* outer_ik;
--- a/hotspot/src/share/vm/interpreter/linkResolver.cpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/interpreter/linkResolver.cpp	Fri Apr 19 13:48:54 2013 -0700
@@ -1014,13 +1014,28 @@
                                                       resolved_method->name(),
                                                       resolved_method->signature()));
   }
-  // check if public
-  if (!sel_method->is_public()) {
-    ResourceMark rm(THREAD);
-    THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
-              Method::name_and_sig_as_C_string(recv_klass(),
-                                                      sel_method->name(),
-                                                      sel_method->signature()));
+  // check access
+  if (sel_method->method_holder()->is_interface()) {
+    // Method holder is an interface. Throw Illegal Access Error if sel_method
+    // is neither public nor private.
+    if (!(sel_method->is_public() || sel_method->is_private())) {
+      ResourceMark rm(THREAD);
+      THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
+                Method::name_and_sig_as_C_string(recv_klass(),
+                                                 sel_method->name(),
+                                                 sel_method->signature()));
+    }
+  }
+  else {
+    // Method holder is a class. Throw Illegal Access Error if sel_method
+    // is not public.
+    if (!sel_method->is_public()) {
+      ResourceMark rm(THREAD);
+      THROW_MSG(vmSymbols::java_lang_IllegalAccessError(),
+                Method::name_and_sig_as_C_string(recv_klass(),
+                                                 sel_method->name(),
+                                                 sel_method->signature()));
+    }
   }
   // check if abstract
   if (check_null_and_abstract && sel_method->is_abstract()) {
--- a/hotspot/src/share/vm/prims/methodHandles.cpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/prims/methodHandles.cpp	Fri Apr 19 13:48:54 2013 -0700
@@ -187,6 +187,11 @@
     flags |= IS_CONSTRUCTOR | (JVM_REF_invokeSpecial << REFERENCE_KIND_SHIFT);
   } else if (mods.is_static()) {
     flags |= IS_METHOD | (JVM_REF_invokeStatic << REFERENCE_KIND_SHIFT);
+     // Check if this method is a lambda method that is generated as
+     // private static method.
+     if (m->is_private() && m->method_holder()->is_interface()) {
+       vmindex = klassItable::compute_itable_index(m);
+     }
   } else if (receiver_limit != mklass &&
              !receiver_limit->is_subtype_of(mklass)) {
     return NULL;  // bad receiver limit
--- a/hotspot/src/share/vm/runtime/arguments.cpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/runtime/arguments.cpp	Fri Apr 19 13:48:54 2013 -0700
@@ -1901,7 +1901,7 @@
 
   // Divide by bucket size to prevent a large size from causing rollover when
   // calculating amount of memory needed to be allocated for the String table.
-  status = status && verify_interval(StringTableSize, defaultStringTableSize,
+  status = status && verify_interval(StringTableSize, minimumStringTableSize,
     (max_uintx / StringTable::bucket_size()), "StringTable size");
 
   if (MinHeapFreeRatio > MaxHeapFreeRatio) {
--- a/hotspot/src/share/vm/services/memBaseline.hpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/services/memBaseline.hpp	Fri Apr 19 13:48:54 2013 -0700
@@ -133,7 +133,7 @@
 
 
 // This class aggregates malloc'd records by memory type
-class MallocMem : public _ValueObj {
+class MallocMem VALUE_OBJ_CLASS_SPEC {
  private:
   MEMFLAGS       _type;
 
@@ -211,7 +211,7 @@
 };
 
 // This class aggregates virtual memory by its memory type
-class VMMem : public _ValueObj {
+class VMMem VALUE_OBJ_CLASS_SPEC {
  private:
   MEMFLAGS       _type;
 
@@ -296,7 +296,7 @@
  * aggregates memory usage by callsites when detail tracking
  * is on.
  */
-class MemBaseline : public _ValueObj {
+class MemBaseline VALUE_OBJ_CLASS_SPEC {
   friend class BaselineReporter;
   friend class BaselineComparisonReporter;
 
--- a/hotspot/src/share/vm/services/memPtr.hpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/services/memPtr.hpp	Fri Apr 19 13:48:54 2013 -0700
@@ -89,7 +89,7 @@
  * the memory pointer either points to a malloc'd
  * memory block, or a mmap'd memory block
  */
-class MemPointer : public _ValueObj {
+class MemPointer VALUE_OBJ_CLASS_SPEC {
  public:
   MemPointer(): _addr(0) { }
   MemPointer(address addr): _addr(addr) { }
--- a/hotspot/src/share/vm/services/memSnapshot.hpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/services/memSnapshot.hpp	Fri Apr 19 13:48:54 2013 -0700
@@ -308,7 +308,7 @@
   }
 };
 
-class StagingArea : public _ValueObj {
+class StagingArea VALUE_OBJ_CLASS_SPEC {
  private:
   MemPointerArray*   _malloc_data;
   MemPointerArray*   _vm_data;
--- a/hotspot/src/share/vm/services/memTrackWorker.hpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/services/memTrackWorker.hpp	Fri Apr 19 13:48:54 2013 -0700
@@ -32,7 +32,7 @@
 // Maximum MAX_GENERATIONS generation data can be tracked.
 #define MAX_GENERATIONS  512
 
-class GenerationData : public _ValueObj {
+class GenerationData VALUE_OBJ_CLASS_SPEC {
  private:
   int           _number_of_classes;
   MemRecorder*  _recorder_list;
--- a/hotspot/src/share/vm/utilities/globalDefinitions.hpp	Fri Apr 19 10:09:11 2013 -0700
+++ b/hotspot/src/share/vm/utilities/globalDefinitions.hpp	Fri Apr 19 13:48:54 2013 -0700
@@ -328,9 +328,10 @@
 
 
 //----------------------------------------------------------------------------------------------------
-// Minimum StringTableSize value
+// Default and minimum StringTableSize values
 
-const int defaultStringTableSize=1009;
+const int defaultStringTableSize = NOT_LP64(1009) LP64_ONLY(60013);
+const int minimumStringTableSize=1009;
 
 
 //----------------------------------------------------------------------------------------------------