JDK-4682728 : CTW assertion at \src\share\vm\opto\block.cpp, 379
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 1.4.1,1.4.1_01
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic,solaris_8,windows_2000
  • CPU: generic,x86,sparc
  • Submitted: 2002-05-09
  • Updated: 2004-10-12
  • Resolved: 2002-06-25
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 Other Other
1.3.1_14Fixed 1.4.1_03 03Fixed 1.4.2Fixed
Related Reports
Duplicate :  
Duplicate :  
Duplicate :  
Description
Name: fh87463			Date: 05/09/2002



Following assertion occur when running Compile The Wrold tests on windows platform.
Binary: Hopper JDK build 11 server VM.

#
# HotSpot Virtual Machine Error, assertion failure
# Please report this error at
# http://java.sun.com/cgi-bin/bugreport.cgi
#
# Java VM: Java HotSpot(TM) Server VM (1.4.1-beta-b11-debug mixed mode)
#
# assert(pb->_nodes[ pb->_nodes.size() - pb->_num_succs ]->is_block_proj(), "too many control users, not a CFG?")
#
# Error ID: D:/BUILD_AREA/jdk1.4.1/hotspot\src\share\vm\opto\block.cpp, 379
#
# Problematic Thread: prio=5 tid=0x002AF3A8 nid=0x470 runnable 
#


Please look into rerun scripts for more detail.

#########################
# To reproduce the bug:
#########################
1. cd /net/jano.sfbay/export/disk20/GammaBase/Bugs/[bug ID]
2. Map sqesvr:/export/vsn to X:
3. run one of the shell scripts: 
   run.Dynamo4.1.0.jar.1.ksh
run.Dynamo4.5.0.jar.1.ksh
run.classes.jar.1.ksh

======================================================================



Simplified test case:

cat <<_EOF >bug.4682728.rc
#MinInliningThreshold=0 # 0 suppresses the bug
CompileOnly=SessionBeanManager.createEJBHome
+PrintOpto
#+PrintOptoInlining
#  1!  atg.ejbserver.SessionBeanManager::createEJBHome (342 bytes)
#       atg.ejbserver.SessionBeanManagerSuper::getEJBHomeClass @ 4 (5 bytes)
#       atg.ejbserver.SessionBeanManagerSuper::getEJBHomeClass @ 242 (5 bytes)
+CompileTheWorld
CompileTheWorldStartAt=894 # 895 suppresses the bug
CompileTheWorldStopAt=1057
_EOF

setenv TB_VM /net/sqesvr/export/vsn/VM/testbase/testbase_vm
$JAVA_HOME/bin/java_g -XX:Flags=bug.4682728.rc -Xbootclasspath/p:$TB_VM/src/jit/compiletheworld/jars/a-d/classes.jar

###@###.### 2002-05-28
###@###.### 10/12/04 20:30 GMT

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: 1.4.1_03 mantis FIXED IN: 1.4.1_03 mantis INTEGRATED IN: 1.4.1_03 mantis VERIFIED IN: mantis
31-07-2004

SUGGESTED FIX ###@###.### 2003-04-25 file:/net/balvenie/export/imgr_home/archive/main/c2_baseline/2002/20020612153117.jrose.mantis/webrev/index.html ----- Here is a back-port to 1.3.1 of my fixes in the 1.4 line. IT IS NOT TESTED! --- OLD-parseHelper.cpp Fri Jul 30 16:06:00 2004 +++ parseHelper.cpp Fri Jul 30 16:17:29 2004 @@ -319,7 +319,8 @@ // If cast is dead, only null-path is taken Node *not_null_ctrl = cast->in(0); if( not_null_ctrl == _top ) { - push(_null); + set_control(region->in(3)); // Use is-null arm of test. + push(_null); // same as phi->in(3) below return; } cast = _gvn.transform(cast); @@ -388,7 +389,8 @@ Node *not_null_ctrl = cast->in(0); // If cast is dead, only null-path is taken if( not_null_ctrl == _top ) { - push(_gvn.intcon(0)); + set_control(region->in(3)); // Use is-null arm of test. + push(_gvn.intcon(0)); // same as phi->in(3) below return; } cast = _gvn.transform(cast); @@ -451,8 +453,10 @@ Node *cast = null_check_oop( region, obj, _null, false, bci ); Node *not_null_ctrl = cast->in(0); // If control is dead, we are storing a NULL pointer - if( not_null_ctrl == _top ) + if( not_null_ctrl == _top ) { + set_control(region->in(3)); // Use is-null arm of test. return; // No store-check needed + } cast = _gvn.transform(cast); // LoadKlass and make CheckType; set region slot 2 ###@###.### 2004-07-30
30-07-2004

EVALUATION This happens on sparc as well ###@###.### 2002-05-13 (This bug is a regression which occurred between the b02 and b03 promotions for 1.4.1. Although it's nice to know, finally, that this regression occured back then--in February--it's inconvenient to fix this right now, while we're trying to freeze for beta.) Root cause: This is part of the bug-tail from a rewrite of the instanceof/checkcast algorithm, which was putback 20010927-160457 to c2_baseline. If an oop is always null, and gen_checkcast passes it to null_check_oop, then gen_checkcast fails to recognize that the normal control flow path goes dead, and keeps parsing. The end result is two calls feeding off the same control edge (the "oop is null" test). ###@###.### 2002-05-28 The reason this bug is so oddly timed is that it is not really a bug. The CTW run which produces it is missing the "-verify" flag, so presumably one or more of the involved methods contain bad bytecodes. I am lowering the priority and decommitting from hopper to reflect this. ###@###.### 2002-05-29 This bug causes iMM4.5 failed on 1.4.1, please see bug 4775681. ###@###.### 2002-12-20
29-05-2002