3384 // Something like byte[int+] meets char[int+]. |
3384 // Something like byte[int+] meets char[int+]. |
3385 // This must fall to bottom, not (int[-128..65535])[int+]. |
3385 // This must fall to bottom, not (int[-128..65535])[int+]. |
3386 instance_id = InstanceBot; |
3386 instance_id = InstanceBot; |
3387 tary = TypeAry::make(Type::BOTTOM, tary->_size); |
3387 tary = TypeAry::make(Type::BOTTOM, tary->_size); |
3388 } |
3388 } |
3389 } |
3389 } else // Non integral arrays. |
|
3390 // Must fall to bottom if exact klasses in upper lattice |
|
3391 // are not equal or super klass is exact. |
|
3392 if ( above_centerline(ptr) && klass() != tap->klass() && |
|
3393 // meet with top[] and bottom[] are processed further down: |
|
3394 tap ->_klass != NULL && this->_klass != NULL && |
|
3395 // both are exact and not equal: |
|
3396 ((tap ->_klass_is_exact && this->_klass_is_exact) || |
|
3397 // 'tap' is exact and super or unrelated: |
|
3398 (tap ->_klass_is_exact && !tap->klass()->is_subtype_of(klass())) || |
|
3399 // 'this' is exact and super or unrelated: |
|
3400 (this->_klass_is_exact && !klass()->is_subtype_of(tap->klass())))) { |
|
3401 tary = TypeAry::make(Type::BOTTOM, tary->_size); |
|
3402 return make( NotNull, NULL, tary, lazy_klass, false, off, InstanceBot ); |
|
3403 } |
|
3404 |
3390 bool xk = false; |
3405 bool xk = false; |
3391 switch (tap->ptr()) { |
3406 switch (tap->ptr()) { |
3392 case AnyNull: |
3407 case AnyNull: |
3393 case TopPTR: |
3408 case TopPTR: |
3394 // Compute new klass on demand, do not use tap->_klass |
3409 // Compute new klass on demand, do not use tap->_klass |