1.1 --- a/src/share/vm/opto/type.cpp Fri Mar 04 22:44:50 2011 -0800 1.2 +++ b/src/share/vm/opto/type.cpp Sat Mar 05 11:02:04 2011 -0800 1.3 @@ -3386,7 +3386,22 @@ 1.4 instance_id = InstanceBot; 1.5 tary = TypeAry::make(Type::BOTTOM, tary->_size); 1.6 } 1.7 + } else // Non integral arrays. 1.8 + // Must fall to bottom if exact klasses in upper lattice 1.9 + // are not equal or super klass is exact. 1.10 + if ( above_centerline(ptr) && klass() != tap->klass() && 1.11 + // meet with top[] and bottom[] are processed further down: 1.12 + tap ->_klass != NULL && this->_klass != NULL && 1.13 + // both are exact and not equal: 1.14 + ((tap ->_klass_is_exact && this->_klass_is_exact) || 1.15 + // 'tap' is exact and super or unrelated: 1.16 + (tap ->_klass_is_exact && !tap->klass()->is_subtype_of(klass())) || 1.17 + // 'this' is exact and super or unrelated: 1.18 + (this->_klass_is_exact && !klass()->is_subtype_of(tap->klass())))) { 1.19 + tary = TypeAry::make(Type::BOTTOM, tary->_size); 1.20 + return make( NotNull, NULL, tary, lazy_klass, false, off, InstanceBot ); 1.21 } 1.22 + 1.23 bool xk = false; 1.24 switch (tap->ptr()) { 1.25 case AnyNull: