8022592: assert at constantTag.cpp:57: ShouldNotReachHere()
authorcoleenp
Fri, 11 Oct 2013 11:23:49 -0400
changeset 20677 ff4fc393de4c
parent 20674 380fc00765c6
child 20678 c185b0cc7797
8022592: assert at constantTag.cpp:57: ShouldNotReachHere() Summary: more missing cases for JVM_CONSTANT_Method{Handle,Type}InError Reviewed-by: hseigel, dcubed
hotspot/src/share/vm/oops/constantPool.cpp
hotspot/src/share/vm/utilities/constantTag.cpp
hotspot/src/share/vm/utilities/constantTag.hpp
--- a/hotspot/src/share/vm/oops/constantPool.cpp	Fri Oct 11 13:48:02 2013 +0200
+++ b/hotspot/src/share/vm/oops/constantPool.cpp	Fri Oct 11 11:23:49 2013 -0400
@@ -864,32 +864,14 @@
 }
 
 
-jbyte normalize_error_tag(jbyte tag) {
-  switch (tag) {
-  case JVM_CONSTANT_UnresolvedClassInError:
-    return JVM_CONSTANT_UnresolvedClass;
-  case JVM_CONSTANT_MethodHandleInError:
-    return JVM_CONSTANT_MethodHandle;
-  case JVM_CONSTANT_MethodTypeInError:
-    return JVM_CONSTANT_MethodType;
-  default:
-    return tag;
-  }
-}
-
 // Compare this constant pool's entry at index1 to the constant pool
 // cp2's entry at index2.
 bool ConstantPool::compare_entry_to(int index1, constantPoolHandle cp2,
        int index2, TRAPS) {
 
-  jbyte t1 = tag_at(index1).value();
-  jbyte t2 = cp2->tag_at(index2).value();
-
-
-  // JVM_CONSTANT_UnresolvedClassInError tag is equal to JVM_CONSTANT_UnresolvedClass
-  // when comparing (and the other error tags)
-  t1 = normalize_error_tag(t1);
-  t2 = normalize_error_tag(t2);
+  // The error tags are equivalent to non-error tags when comparing
+  jbyte t1 = tag_at(index1).non_error_value();
+  jbyte t2 = cp2->tag_at(index2).non_error_value();
 
   if (t1 != t2) {
     // Not the same entry type so there is nothing else to check. Note
--- a/hotspot/src/share/vm/utilities/constantTag.cpp	Fri Oct 11 13:48:02 2013 +0200
+++ b/hotspot/src/share/vm/utilities/constantTag.cpp	Fri Oct 11 11:23:49 2013 -0400
@@ -51,7 +51,9 @@
     case JVM_CONSTANT_ClassIndex :
     case JVM_CONSTANT_StringIndex :
     case JVM_CONSTANT_MethodHandle :
+    case JVM_CONSTANT_MethodHandleInError :
     case JVM_CONSTANT_MethodType :
+    case JVM_CONSTANT_MethodTypeInError :
       return T_OBJECT;
     default:
       ShouldNotReachHere();
@@ -60,6 +62,19 @@
 }
 
 
+jbyte constantTag::non_error_value() const {
+  switch (_tag) {
+  case JVM_CONSTANT_UnresolvedClassInError:
+    return JVM_CONSTANT_UnresolvedClass;
+  case JVM_CONSTANT_MethodHandleInError:
+    return JVM_CONSTANT_MethodHandle;
+  case JVM_CONSTANT_MethodTypeInError:
+    return JVM_CONSTANT_MethodType;
+  default:
+    return _tag;
+  }
+}
+
 
 const char* constantTag::internal_name() const {
   switch (_tag) {
--- a/hotspot/src/share/vm/utilities/constantTag.hpp	Fri Oct 11 13:48:02 2013 +0200
+++ b/hotspot/src/share/vm/utilities/constantTag.hpp	Fri Oct 11 11:23:49 2013 -0400
@@ -108,7 +108,8 @@
     _tag = tag;
   }
 
-  jbyte value()                      { return _tag; }
+  jbyte value() const                { return _tag; }
+  jbyte non_error_value() const;
 
   BasicType basic_type() const;        // if used with ldc, what kind of value gets pushed?