hotspot/src/share/vm/classfile/systemDictionary.cpp
changeset 13968 8c9029c01470
parent 13929 8da0dc50a6e4
child 13973 cb904e0b6a45
--- a/hotspot/src/share/vm/classfile/systemDictionary.cpp	Mon Oct 08 13:02:13 2012 -0700
+++ b/hotspot/src/share/vm/classfile/systemDictionary.cpp	Mon Oct 08 17:04:00 2012 -0700
@@ -973,9 +973,12 @@
     if (sid != vmSymbols::NO_SID) {
       Klass* k = NULL;
       switch (sid) {
-        #define WK_KLASS_CASE(name, symbol, ignore_option) \
+        #define WK_KLASS_CASE(name, symbol, option) \
         case vmSymbols::VM_SYMBOL_ENUM_NAME(symbol): \
-          k = WK_KLASS(name); break;
+          if (option == Pre_Link) { \
+            k = WK_KLASS(name); \
+          } \
+          break;
         WK_KLASSES_DO(WK_KLASS_CASE)
         #undef WK_KLASS_CASE
       }
@@ -1955,6 +1958,16 @@
   start_id = limit_id;
 }
 
+#ifdef ASSERT
+void SystemDictionary::check_wk_pre_link_klasses() {
+  #define WK_KLASS_CHECK(name, symbol, option) \
+    if (option == Pre_Link) { \
+      assert(name()->is_public(), ""); \
+    }
+  WK_KLASSES_DO(WK_KLASS_CHECK);
+  #undef WK_KLASS_CHECK
+}
+#endif
 
 void SystemDictionary::initialize_preloaded_classes(TRAPS) {
   assert(WK_KLASS(Object_klass) == NULL, "preloaded classes should only be initialized once");
@@ -2010,6 +2023,8 @@
 
   initialize_wk_klasses_until(WKID_LIMIT, scan, CHECK);
 
+  check_wk_pre_link_klasses();
+
   _box_klasses[T_BOOLEAN] = WK_KLASS(Boolean_klass);
   _box_klasses[T_CHAR]    = WK_KLASS(Character_klass);
   _box_klasses[T_FLOAT]   = WK_KLASS(Float_klass);