Mercurial > hg > graal-compiler
diff src/share/vm/opto/doCall.cpp @ 20552:331df100ad40
8059299: assert(adr_type != NULL) failed: expecting TypeKlassPtr
Summary: Use top() for dead paths when initializing Phi node of exceptions klasses in Parse::catch_inline_exceptions().
Reviewed-by: jrose, vlivanov
author | kvn |
---|---|
date | Thu, 02 Oct 2014 11:36:44 -0700 |
parents | 411e30e5fbb8 |
children | e7b3d177adda |
line wrap: on
line diff
--- a/src/share/vm/opto/doCall.cpp Fri Oct 17 07:27:03 2014 -0700 +++ b/src/share/vm/opto/doCall.cpp Thu Oct 02 11:36:44 2014 -0700 @@ -799,10 +799,16 @@ // each arm of the Phi. If I know something clever about the exceptions // I'm loading the class from, I can replace the LoadKlass with the // klass constant for the exception oop. - if( ex_node->is_Phi() ) { - ex_klass_node = new (C) PhiNode( ex_node->in(0), TypeKlassPtr::OBJECT ); - for( uint i = 1; i < ex_node->req(); i++ ) { - Node* p = basic_plus_adr( ex_node->in(i), ex_node->in(i), oopDesc::klass_offset_in_bytes() ); + if (ex_node->is_Phi()) { + ex_klass_node = new (C) PhiNode(ex_node->in(0), TypeKlassPtr::OBJECT); + for (uint i = 1; i < ex_node->req(); i++) { + Node* ex_in = ex_node->in(i); + if (ex_in == top() || ex_in == NULL) { + // This path was not taken. + ex_klass_node->init_req(i, top()); + continue; + } + Node* p = basic_plus_adr(ex_in, ex_in, oopDesc::klass_offset_in_bytes()); Node* k = _gvn.transform( LoadKlassNode::make(_gvn, immutable_memory(), p, TypeInstPtr::KLASS, TypeKlassPtr::OBJECT) ); ex_klass_node->init_req( i, k ); }