src/share/vm/opto/type.cpp

changeset 1770
ae4032fb0a5b
parent 1444
03b336640699
child 1774
09ac706c2623
     1.1 --- a/src/share/vm/opto/type.cpp	Thu Dec 03 14:20:22 2009 -0800
     1.2 +++ b/src/share/vm/opto/type.cpp	Thu Jan 21 10:07:59 2010 -0800
     1.3 @@ -2545,12 +2545,15 @@
     1.4        ftip->is_loaded() &&  ftip->klass()->is_interface() &&
     1.5        ktip->is_loaded() && !ktip->klass()->is_interface()) {
     1.6      // Happens in a CTW of rt.jar, 320-341, no extra flags
     1.7 +    assert(!ftip->klass_is_exact(), "interface could not be exact");
     1.8      return ktip->cast_to_ptr_type(ftip->ptr());
     1.9    }
    1.10 +  // Interface klass type could be exact in opposite to interface type,
    1.11 +  // return it here instead of incorrect Constant ptr J/L/Object (6894807).
    1.12    if (ftkp != NULL && ktkp != NULL &&
    1.13        ftkp->is_loaded() &&  ftkp->klass()->is_interface() &&
    1.14 +      !ftkp->klass_is_exact() && // Keep exact interface klass
    1.15        ktkp->is_loaded() && !ktkp->klass()->is_interface()) {
    1.16 -    // Happens in a CTW of rt.jar, 320-341, no extra flags
    1.17      return ktkp->cast_to_ptr_type(ftkp->ptr());
    1.18    }
    1.19  

mercurial