1.1 --- a/src/share/vm/opto/type.cpp Tue Jan 13 14:02:19 2009 -0800 1.2 +++ b/src/share/vm/opto/type.cpp Wed Jan 14 14:12:00 2009 -0800 1.3 @@ -2471,6 +2471,8 @@ 1.4 const Type* ft = join(kills); 1.5 const TypeInstPtr* ftip = ft->isa_instptr(); 1.6 const TypeInstPtr* ktip = kills->isa_instptr(); 1.7 + const TypeKlassPtr* ftkp = ft->isa_klassptr(); 1.8 + const TypeKlassPtr* ktkp = kills->isa_klassptr(); 1.9 1.10 if (ft->empty()) { 1.11 // Check for evil case of 'this' being a class and 'kills' expecting an 1.12 @@ -2484,6 +2486,8 @@ 1.13 // uplift the type. 1.14 if (!empty() && ktip != NULL && ktip->is_loaded() && ktip->klass()->is_interface()) 1.15 return kills; // Uplift to interface 1.16 + if (!empty() && ktkp != NULL && ktkp->klass()->is_loaded() && ktkp->klass()->is_interface()) 1.17 + return kills; // Uplift to interface 1.18 1.19 return Type::TOP; // Canonical empty value 1.20 } 1.21 @@ -2499,6 +2503,12 @@ 1.22 // Happens in a CTW of rt.jar, 320-341, no extra flags 1.23 return ktip->cast_to_ptr_type(ftip->ptr()); 1.24 } 1.25 + if (ftkp != NULL && ktkp != NULL && 1.26 + ftkp->is_loaded() && ftkp->klass()->is_interface() && 1.27 + ktkp->is_loaded() && !ktkp->klass()->is_interface()) { 1.28 + // Happens in a CTW of rt.jar, 320-341, no extra flags 1.29 + return ktkp->cast_to_ptr_type(ftkp->ptr()); 1.30 + } 1.31 1.32 return ft; 1.33 }