Mercurial > hg > graal-compiler
diff src/share/vm/c1/c1_LIR.cpp @ 6739:8a02ca5e5576
7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
Summary: C1 needs knowledge of T_METADATA at the LIR level.
Reviewed-by: kvn, coleenp
author | roland |
---|---|
date | Tue, 11 Sep 2012 16:20:57 +0200 |
parents | da91efe96a93 |
children | 7eca5de9e0b6 |
line wrap: on
line diff
--- a/src/share/vm/c1/c1_LIR.cpp Tue Sep 11 14:59:23 2012 +0200 +++ b/src/share/vm/c1/c1_LIR.cpp Tue Sep 11 16:20:57 2012 +0200 @@ -89,8 +89,12 @@ ClassConstant* c = type->as_ClassConstant(); if (c != NULL && !c->value()->is_loaded()) { return LIR_OprFact::metadataConst(NULL); + } else if (c != NULL) { + return LIR_OprFact::metadataConst(c->value()->constant_encoding()); } else { - return LIR_OprFact::metadataConst(c->value()->constant_encoding()); + MethodConstant* m = type->as_MethodConstant(); + assert (m != NULL, "not a class or a method?"); + return LIR_OprFact::metadataConst(m->value()->constant_encoding()); } } case objectTag : { @@ -1166,10 +1170,12 @@ void LIR_List::oop2reg_patch(jobject o, LIR_Opr reg, CodeEmitInfo* info) { + assert(reg->type() == T_OBJECT, "bad reg"); append(new LIR_Op1(lir_move, LIR_OprFact::oopConst(o), reg, T_OBJECT, lir_patch_normal, info)); } void LIR_List::klass2reg_patch(Metadata* o, LIR_Opr reg, CodeEmitInfo* info) { + assert(reg->type() == T_METADATA, "bad reg"); append(new LIR_Op1(lir_move, LIR_OprFact::metadataConst(o), reg, T_METADATA, lir_patch_normal, info)); }