Mercurial > hg > truffle
diff src/share/vm/opto/type.cpp @ 555:35ae4dd6c27c
6788347: C2Compiler crash 6u7
Reviewed-by: kvn
author | never |
---|---|
date | Wed, 14 Jan 2009 14:12:00 -0800 |
parents | f4fe12e429a4 |
children | 465813e0303a |
line wrap: on
line diff
--- a/src/share/vm/opto/type.cpp Tue Jan 13 14:02:19 2009 -0800 +++ b/src/share/vm/opto/type.cpp Wed Jan 14 14:12:00 2009 -0800 @@ -2471,6 +2471,8 @@ const Type* ft = join(kills); const TypeInstPtr* ftip = ft->isa_instptr(); const TypeInstPtr* ktip = kills->isa_instptr(); + const TypeKlassPtr* ftkp = ft->isa_klassptr(); + const TypeKlassPtr* ktkp = kills->isa_klassptr(); if (ft->empty()) { // Check for evil case of 'this' being a class and 'kills' expecting an @@ -2484,6 +2486,8 @@ // uplift the type. if (!empty() && ktip != NULL && ktip->is_loaded() && ktip->klass()->is_interface()) return kills; // Uplift to interface + if (!empty() && ktkp != NULL && ktkp->klass()->is_loaded() && ktkp->klass()->is_interface()) + return kills; // Uplift to interface return Type::TOP; // Canonical empty value } @@ -2499,6 +2503,12 @@ // Happens in a CTW of rt.jar, 320-341, no extra flags return ktip->cast_to_ptr_type(ftip->ptr()); } + if (ftkp != NULL && ktkp != NULL && + ftkp->is_loaded() && ftkp->klass()->is_interface() && + 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()); + } return ft; }