From 7412ccfaa6378c6d196b022f890dffb860fba594 Mon Sep 17 00:00:00 2001 From: kvn Date: Thu, 27 Mar 2008 09:12:54 -0700 Subject: [PATCH] 6679854: assert in escape.cpp:397 Summary: The assert misses the case CastX2P 'base' for an unsafe field reference Reviewed-by: never, jrose --- src/share/vm/opto/escape.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/share/vm/opto/escape.cpp b/src/share/vm/opto/escape.cpp index e587cee17..0ea97731b 100644 --- a/src/share/vm/opto/escape.cpp +++ b/src/share/vm/opto/escape.cpp @@ -51,21 +51,21 @@ void PointsToNode::remove_edge(uint targIdx, PointsToNode::EdgeType et) { } #ifndef PRODUCT -static char *node_type_names[] = { +static const char *node_type_names[] = { "UnknownType", "JavaObject", "LocalVar", "Field" }; -static char *esc_names[] = { +static const char *esc_names[] = { "UnknownEscape", "NoEscape", "ArgEscape", "GlobalEscape" }; -static char *edge_type_suffix[] = { +static const char *edge_type_suffix[] = { "?", // UnknownEdge "P", // PointsToEdge "D", // DeferredEdge @@ -383,18 +383,25 @@ static Node* get_addp_base(Node *addp) { // | | // AddP ( base == address ) // - // case #6. Constant Pool or ThreadLocal or Raw object's field reference: - // ConP # Object from Constant Pool. + // case #6. Constant Pool, ThreadLocal, CastX2P or + // Raw object's field reference: + // {ConP, ThreadLocal, CastX2P, raw Load} // top | // \ | // AddP ( base == top ) // + // case #7. Klass's field reference. + // LoadKlass + // | | + // AddP ( base == address ) + // Node *base = addp->in(AddPNode::Base)->uncast(); if (base->is_top()) { // The AddP case #3 and #6. base = addp->in(AddPNode::Address)->uncast(); assert(base->Opcode() == Op_ConP || base->Opcode() == Op_ThreadLocal || - base->is_Mem() && base->bottom_type() == TypeRawPtr::NOTNULL || - base->is_Proj() && base->in(0)->is_Allocate(), "sanity"); + base->Opcode() == Op_CastX2P || + (base->is_Mem() && base->bottom_type() == TypeRawPtr::NOTNULL) || + (base->is_Proj() && base->in(0)->is_Allocate()), "sanity"); } return base; } -- GitLab