comparison src/share/vm/opto/type.cpp @ 2351:8e72cd29b15d

6589823: Error: meet not symmetric Summary: arrays pointers meet must fall to bottom if exact array klasses in upper lattice are not equal or super klass is exact. Reviewed-by: never
author kvn
date Sat, 05 Mar 2011 11:02:04 -0800
parents 78e248949382
children 83f08886981c
comparison
equal deleted inserted replaced
2350:8ec5e1f45ea1 2351:8e72cd29b15d
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