JDK-4762537 : assertion failure: adr_type must match alias idx
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: 1.4.2
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: solaris_8
  • CPU: x86,sparc
  • Submitted: 2002-10-14
  • Updated: 2002-12-12
  • Resolved: 2002-12-11
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.4.2 b10Fixed
Related Reports
Duplicate :  
Relates :  
Description
Running mantis b03, java_g -server on Java2d demo gets an assertion failure
on x86 solaris:

# assert(adr_type() == 0 || adr_type()->empty() || phase->C->must_alias(adr_type(), alias_idx), "adr_type must match alias idx")
#
# Error ID: /BUILD_AREA/jdk1.4.2/hotspot/src/share/vm/opto/memnode.cpp, 87

command line was:


java_g -server -Xcomp -Xbatch -XX:+TraceDeoptimization -jar Java2Demo.jar main


Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: mantis FIXED IN: mantis-beta INTEGRATED IN: mantis-b10 mantis-beta VERIFIED IN: mantis-beta
14-06-2004

EVALUATION This is a bug in the compiler's type system. The compiler starts with the types of an expression as determined by the bytecodes, and attemts to refine the type by analyzing the program. In order to to prevent incorrect optimizations, the compiler needs to keep track of which types can potentially alias each other (i.e. when two variables of apparently different types could refer to the same memory location.) This bug was caused by an incorrect alias computation for references to fields of a VM internal data structure describing a class.
11-06-2004

SUGGESTED FIX *** src/share/vm/opto/compile.cpp 1.550 --- src/share/vm/opto/compile.cpp 1.551 *************** *** 956,961 **** --- 956,966 ---- tj = tk = TypeKlassPtr::make( TypePtr::NotNull, k, offset ); } + // if we are referencing a field within a Klass, we need + // to assume the worst case of an Object + if (offset == Type::OffsetBot || offset < sizeof(Klass)) + tj = tk = TypeKlassPtr::make( ptr, TypeKlassPtr::OBJECT->klass(), offset ); + // Check for precise loads from the primary supertype array and force them // to the supertype cache alias index. Check for generic array loads from // the primary supertype array and also force them to the supertype cache
11-06-2004