JDK-6422099 : C2 assert("live value must not be garbage")
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 5.0u18,5.0u19,6
  • Priority: P2
  • Status: Resolved
  • Resolution: Fixed
  • OS: solaris_9,solaris_10
  • CPU: sparc
  • Submitted: 2006-05-04
  • Updated: 2010-12-13
  • Resolved: 2006-05-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 JDK 6
5.0u19-revFixed 5.0u20-revFixed 5.0u21Fixed 6 b85Fixed
Related Reports
Duplicate :  
Duplicate :  
Relates :  
Description
I think, it happens due to changing of an Ideal graph since
the different changes in 1.5 and 1.6 caused the assert.
I was able to reproduce it on both 64bits VM: amd64 and sparcv9

jano% setenv TEST_JAVA /java/re/jdk/1.6.0/promoted/all/b82/binaries/solaris-sparcv9/fastdebug
jano% setenv LD_LIBRARY_PATH /net/sqesvr-nfs.sfbay/global/nfs/vm/users/viswadeep/1.5.0/VM/TIGER_TESTBASE/bin/lib/sparcv9/runtime/ParallelClassLoading/shared
jano% $TEST_JAVA/bin/java -d64 -server -Xverify:all -Xcomp -Xbatch -XX:+UnlockDiagnosticVMOptions -d64 -Xverify:all -cp /net/sqesvr-nfs.sfbay/global/nfs/vm/users/viswadeep/1.5.0/VM/TIGER_TESTBASE/bin/classes -agentlib:redefineClasses \
runtime.ParallelClassLoading.shared.ReflectionLoadingController -ITERATIONS 100 -DEBUG true -waitTimeInMin 2 -THREADS_COUNT 5 -classDir \
/net/sqesvr-nfs.sfbay/global/nfs/vm/users/viswadeep/1.5.0/VM/TIGER_TESTBASE/bin/classes/runtime/ParallelClassLoading/shared/hierarchies/static-load/static-init/anonymous/complex -class \
custom.R% -provoke reflect -provoke newInstance -regexForFreeingLock custom.A.\* -loadedClasses custom.D1,custom.D2,custom.D3,custom.D4,custom.D5,custom.D6,custom.D7,custom.D8,custom.D9,custom.D10

In 1.6 (Mustang) the assert started after the next fix (#6359906)

#  Internal Error (/net/prt-solamd64-q1-4/PrtBuildDir/workspace/src/share/vm/opto/parse1.cpp, 1555), pid=18647, tid=11
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20051214080340.nips.divmod-debug compiled mode)
#
# Error: assert(n != top() || r->in(pnum) == top(),"live value must not be garbage")

In 1.5.0_07 (Tiger update7) it started after (#6322757)

#  Internal Error (/net/prt-sparc-q2-9/tmp/PrtBuildDir/workspace/src/share/vm/opto/parse1.cpp, 1501 [ Patched ]), pid=12448, tid=26
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (20051216122827.chrisphi.hotspot-debug compiled mode)
#
# Error: assert(n != top() || r->in(pnum) == top(),"live value must not be garbage")

Comments
SUGGESTED FIX Set the bottom type to the previous local if it contains first half of a double or long value when it's second half is being overwritten. Webrev: http://analemma.sfbay.sun.com/net/prt-archiver.sfbay/data/archived_workspaces/main/c2_baseline/2006/20060509104409.kvn.6422099/workspace/webrevs/webrev-2006.05.09/index.html
09-05-2006

EVALUATION ciTypeFlow does not overwrite a type of first slot of a long/double local when there was a store into second slot. It leads to the assert in a merge point since Parser thinks the long/double local still alive on all merged paths.
09-05-2006