comparison src/share/vm/opto/type.cpp @ 14228:e045e1876610

8027571: fatal error: meet not symmetric Summary: meet of one constant array and one exact array not symmetric. Reviewed-by: kvn
author roland
date Tue, 07 Jan 2014 16:02:10 +0100
parents 6c2f07d1495f
children 5ec7dace41a6 abec000618bf
comparison
equal deleted inserted replaced
14227:1128e5fec05f 14228:e045e1876610
3810 // This must fall to bottom, not (int[-128..65535])[int+]. 3810 // This must fall to bottom, not (int[-128..65535])[int+].
3811 instance_id = InstanceBot; 3811 instance_id = InstanceBot;
3812 tary = TypeAry::make(Type::BOTTOM, tary->_size, tary->_stable); 3812 tary = TypeAry::make(Type::BOTTOM, tary->_size, tary->_stable);
3813 } 3813 }
3814 } else // Non integral arrays. 3814 } else // Non integral arrays.
3815 // Must fall to bottom if exact klasses in upper lattice 3815 // Must fall to bottom if exact klasses in upper lattice
3816 // are not equal or super klass is exact. 3816 // are not equal or super klass is exact.
3817 if ( above_centerline(ptr) && klass() != tap->klass() && 3817 if ((above_centerline(ptr) || ptr == Constant) && klass() != tap->klass() &&
3818 // meet with top[] and bottom[] are processed further down: 3818 // meet with top[] and bottom[] are processed further down:
3819 tap ->_klass != NULL && this->_klass != NULL && 3819 tap->_klass != NULL && this->_klass != NULL &&
3820 // both are exact and not equal: 3820 // both are exact and not equal:
3821 ((tap ->_klass_is_exact && this->_klass_is_exact) || 3821 ((tap->_klass_is_exact && this->_klass_is_exact) ||
3822 // 'tap' is exact and super or unrelated: 3822 // 'tap' is exact and super or unrelated:
3823 (tap ->_klass_is_exact && !tap->klass()->is_subtype_of(klass())) || 3823 (tap->_klass_is_exact && !tap->klass()->is_subtype_of(klass())) ||
3824 // 'this' is exact and super or unrelated: 3824 // 'this' is exact and super or unrelated:
3825 (this->_klass_is_exact && !klass()->is_subtype_of(tap->klass())))) { 3825 (this->_klass_is_exact && !klass()->is_subtype_of(tap->klass())))) {
3826 tary = TypeAry::make(Type::BOTTOM, tary->_size, tary->_stable); 3826 tary = TypeAry::make(Type::BOTTOM, tary->_size, tary->_stable);
3827 return make(NotNull, NULL, tary, lazy_klass, false, off, InstanceBot); 3827 return make(NotNull, NULL, tary, lazy_klass, false, off, InstanceBot);
3828 } 3828 }
3829 3829
3830 bool xk = false; 3830 bool xk = false;