提交 13613f4b 编写于 作者: K kvn

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
上级 73326802
...@@ -3386,7 +3386,22 @@ const Type *TypeAryPtr::xmeet( const Type *t ) const { ...@@ -3386,7 +3386,22 @@ const Type *TypeAryPtr::xmeet( const Type *t ) const {
instance_id = InstanceBot; instance_id = InstanceBot;
tary = TypeAry::make(Type::BOTTOM, tary->_size); tary = TypeAry::make(Type::BOTTOM, tary->_size);
} }
} else // Non integral arrays.
// Must fall to bottom if exact klasses in upper lattice
// are not equal or super klass is exact.
if ( above_centerline(ptr) && klass() != tap->klass() &&
// meet with top[] and bottom[] are processed further down:
tap ->_klass != NULL && this->_klass != NULL &&
// both are exact and not equal:
((tap ->_klass_is_exact && this->_klass_is_exact) ||
// 'tap' is exact and super or unrelated:
(tap ->_klass_is_exact && !tap->klass()->is_subtype_of(klass())) ||
// 'this' is exact and super or unrelated:
(this->_klass_is_exact && !klass()->is_subtype_of(tap->klass())))) {
tary = TypeAry::make(Type::BOTTOM, tary->_size);
return make( NotNull, NULL, tary, lazy_klass, false, off, InstanceBot );
} }
bool xk = false; bool xk = false;
switch (tap->ptr()) { switch (tap->ptr()) {
case AnyNull: case AnyNull:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册