JDK-6599650 : regression: java_g failed on assert(i < _max, "oob")
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 1.3.1_17
  • Priority: P2
  • Status: Resolved
  • Resolution: Fixed
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2007-08-30
  • Updated: 2010-08-18
  • Resolved: 2007-09-20
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
1.3.1_21 b01Fixed
Related Reports
Relates :  
Description
Run demo: 
c:\yqi\jdks_all\jdk1.3.1_20\bin\java_g -server -showversion -XX:+CompileTheWorld -XX:+UseTLE -XX:+PrintCompilation -XX:-Inline -XX:CIStart=12660 -jar SwingSet2.jar

12660   b  java.lang.ThreadLocal$ThreadLocalMap::resize (139 bytes)
12661   b  java.lang.ThreadLocal$ThreadLocalMap::setThreshold (10 bytes)
12662   b  java.lang.ThreadLocal$ThreadLocalMap::prevIndex (16 bytes)
12663   b  java.lang.ThreadLocal$ThreadLocalMap::getAfterMiss (107 bytes)
12664   b  java.lang.ThreadLocal$ThreadLocalMap::replaceStaleEntry (217 bytes)
12665   b  java.lang.ThreadLocal$ThreadLocalMap::expungeStaleEntry (150 bytes)
#
# HotSpot Virtual Machine Error, assertion failure
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# assert(i < _max, "oob")
#
# Error ID: c:\yqi\ws\1.3.1\hs\src\share\vm\opto\node.hpp, 161
#
# Problematic Thread: prio=5 tid=0x98b3b0 nid=0xaec runnable
#

Comments
SUGGESTED FIX http://jpsesvr.sfbay.sun.com:8080/ctetools/html/ViewDetail.jsp?index=2273
12-09-2007

EVALUATION 1.3.1 misses the relaxing condition (is_top()) in the assert in PhaseIterGVN::transform_old() which is present in all next releases (1.4.0 and other): assert((i->_idx >= k->_idx) || i->is_top() , "Idealize should return new nodes, use Identity to return old nodes" ); I also vague remember that I asked Mike P. what should be returned in one of my first fix for dead loop checks in 1.4.2. And the answer was it is OK to return top() in Ideal(). So all my fixes for dead loop checks returns top() and they were backported into 1.3.1.
12-09-2007

EVALUATION The second failure caused by: + const Type *t1 = phase->type( in1 ); + if( t1 == Type::TOP ) return NULL;* + + // Check for dead loop* + if( ( op1 == Op_AddI || op1 == Op_SubI ) && + ( phase->eqv( in1->in(1), this ) || phase->eqv( in1->in(2), this ) ) ) + return phase->C->_top_node; + if( ( op2 == Op_AddI || op2 == Op_SubI ) && + ( phase->eqv( in2->in(1), this ) || phase->eqv( in2->in(2), this ) ) ) + return phase->C->_top_node; + Safe return is NULL not top.
04-09-2007

EVALUATION In domgraph.cpp (6195764 fix), "i" changed to "k" but missed one place in assert: ! for( uint k = 1; k < whead->req(); k++ ) { ! if( !_nodes[whead->in(k)->_idx] ) { // Kill dead input path assert( !visited.test(whead->in(i)->_idx), "input with no loop must be dead" ); _igvn.hash_delete(whead);
31-08-2007