< prev index next >

src/hotspot/share/ci/ciTypeFlow.cpp

Print this page

        

@@ -331,20 +331,18 @@
       bool never_null = k1->as_array_klass()->storage_properties().is_null_free() &&
                         k2->as_array_klass()->storage_properties().is_null_free();
       ciType* elem1 = k1->as_array_klass()->element_klass();
       ciType* elem2 = k2->as_array_klass()->element_klass();
       ciType* elem = elem1;
-      if (elem->is_valuetype() && prop_mismatch) {
-        elem = object_klass;
-      } else if (elem1 != elem2) {
+      if (elem1 != elem2) {
         elem = type_meet_internal(elem1, elem2, analyzer)->as_klass();
       }
       // Do an easy shortcut if one type is a super of the other.
-      if (elem == elem1) {
+      if (elem == elem1 && !prop_mismatch) {
         assert(k1 == ciArrayKlass::make(elem, never_null), "shortcut is OK");
         return k1;
-      } else if (elem == elem2) {
+      } else if (elem == elem2 && !prop_mismatch) {
         assert(k2 == ciArrayKlass::make(elem, never_null), "shortcut is OK");
         return k2;
       } else {
         return ciArrayKlass::make(elem, never_null);
       }
< prev index next >