# HG changeset patch # User acorn # Date 1264705158 18000 # Node ID 3d531bbe5917dae572af0373b3d8975997adb72d # Parent 0c3f888b7636d129c6a30a6a6d81f31581380d77# Parent ae4032fb0a5b81e54ce98c0a26944ff1d52f4da5 Merge diff -r 0c3f888b7636 -r 3d531bbe5917 src/share/vm/opto/cfgnode.cpp --- a/src/share/vm/opto/cfgnode.cpp Tue Jan 19 16:03:09 2010 -0500 +++ b/src/share/vm/opto/cfgnode.cpp Thu Jan 28 13:59:18 2010 -0500 @@ -956,6 +956,7 @@ } if( jtkp && ttkp ) { if( jtkp->is_loaded() && jtkp->klass()->is_interface() && + !jtkp->klass_is_exact() && // Keep exact interface klass (6894807) ttkp->is_loaded() && !ttkp->klass()->is_interface() ) { assert(ft == ttkp->cast_to_ptr_type(jtkp->ptr()) || ft->isa_narrowoop() && ft->make_ptr() == ttkp->cast_to_ptr_type(jtkp->ptr()), ""); diff -r 0c3f888b7636 -r 3d531bbe5917 src/share/vm/opto/type.cpp --- a/src/share/vm/opto/type.cpp Tue Jan 19 16:03:09 2010 -0500 +++ b/src/share/vm/opto/type.cpp Thu Jan 28 13:59:18 2010 -0500 @@ -2545,12 +2545,15 @@ ftip->is_loaded() && ftip->klass()->is_interface() && ktip->is_loaded() && !ktip->klass()->is_interface()) { // Happens in a CTW of rt.jar, 320-341, no extra flags + assert(!ftip->klass_is_exact(), "interface could not be exact"); return ktip->cast_to_ptr_type(ftip->ptr()); } + // Interface klass type could be exact in opposite to interface type, + // return it here instead of incorrect Constant ptr J/L/Object (6894807). if (ftkp != NULL && ktkp != NULL && ftkp->is_loaded() && ftkp->klass()->is_interface() && + !ftkp->klass_is_exact() && // Keep exact interface klass ktkp->is_loaded() && !ktkp->klass()->is_interface()) { - // Happens in a CTW of rt.jar, 320-341, no extra flags return ktkp->cast_to_ptr_type(ftkp->ptr()); }