Mercurial > hg > truffle
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; |