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