JDK-6528700 : C2 CTW failed in generate_i2c2i_adapters with -XX:+VerifyOops
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 7
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: solaris_9
  • CPU: sparc
  • Submitted: 2007-02-27
  • Updated: 2010-04-03
  • Resolved: 2007-03-15
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.
JDK 6 JDK 7 Other
6u4Fixed 7Fixed hs10Fixed
Description
I am running CTW with -XX:+VerifyOops and got the next failure:

=============== DEBUG MESSAGE: broken oop G1_scratch (/export/home2/work/6523674/src/cpu/sparc/vm/sharedRuntime_sparc.cpp:1198) ================

# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/assembler_sparc.cpp:1925
#
# An unexpected error has been detected by Java Runtime Environment:
#
#  Internal Error (/export/home2/work/6523674/src/cpu/sparc/vm/assembler_sparc.cpp, 1925 [ Patched ]), pid=9050, tid=1
#
# Java VM: Java HotSpot(TM) Server VM (1.7.0-internal-jvmg mixed mode)
#
# Error: assert(false,"error")
# An error report file with more information is saved as hs_err_pid9050.log
#


It failed in the next code in generate_i2c2i_adapters:

#if !defined(_LP64) && defined(COMPILER2)
    __ save(SP, -frame::register_save_words*wordSize, SP);
    __ ld_ptr(G5_method, compiledICHolderOopDesc::holder_klass_offset(), R_temp);
    __ verify_oop(G1_scratch);
    __ cmp(G3_scratch, R_temp);
    __ restore();
#else


But R_temp is defined as L0 above this code:

#if !defined(_LP64) && defined(COMPILER2)
    Register R_temp   = L0;   // another scratch register
#else
    Register R_temp   = G1;   // another scratch register
#endif

Comments
SUGGESTED FIX Use verify_oop(R_temp). Webrev: http://prt-web.sfbay.sun.com/net/prt-archiver.sfbay/data/archived_workspaces/2007/20070228111143.kvn.6528700/workspace/webrevs/webrev-2007.02.28/index.html
28-02-2007

EVALUATION Typo. Use verify_oop(R_temp).
27-02-2007