src/share/vm/opto/type.cpp

changeset 2633
8e72cd29b15d
parent 2435
78e248949382
child 2636
83f08886981c
     1.1 --- a/src/share/vm/opto/type.cpp	Fri Mar 04 22:44:50 2011 -0800
     1.2 +++ b/src/share/vm/opto/type.cpp	Sat Mar 05 11:02:04 2011 -0800
     1.3 @@ -3386,7 +3386,22 @@
     1.4          instance_id = InstanceBot;
     1.5          tary = TypeAry::make(Type::BOTTOM, tary->_size);
     1.6        }
     1.7 +    } else // Non integral arrays.
     1.8 +    // Must fall to bottom if exact klasses in upper lattice
     1.9 +    // are not equal or super klass is exact.
    1.10 +    if ( above_centerline(ptr) && klass() != tap->klass() &&
    1.11 +         // meet with top[] and bottom[] are processed further down:
    1.12 +         tap ->_klass != NULL  && this->_klass != NULL   &&
    1.13 +         // both are exact and not equal:
    1.14 +        ((tap ->_klass_is_exact && this->_klass_is_exact) ||
    1.15 +         // 'tap'  is exact and super or unrelated:
    1.16 +         (tap ->_klass_is_exact && !tap->klass()->is_subtype_of(klass())) ||
    1.17 +         // 'this' is exact and super or unrelated:
    1.18 +         (this->_klass_is_exact && !klass()->is_subtype_of(tap->klass())))) {
    1.19 +      tary = TypeAry::make(Type::BOTTOM, tary->_size);
    1.20 +      return make( NotNull, NULL, tary, lazy_klass, false, off, InstanceBot );
    1.21      }
    1.22 +
    1.23      bool xk = false;
    1.24      switch (tap->ptr()) {
    1.25      case AnyNull:

mercurial