JDK-6731641 : assert(m->adr_type() == mach->adr_type(),"matcher should not change adr type")
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs14
  • Priority: P4
  • Status: Resolved
  • Resolution: Fixed
  • OS: generic
  • CPU: generic
  • Submitted: 2008-07-30
  • Updated: 2010-04-03
  • Resolved: 2008-09-12
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
6u14Fixed 7Fixed hs14Fixed
Related Reports
Relates :  
CTW runs trigger new assert.  Failure observed on sparc -d32 with at least two different jar files:


SUGGESTED FIX - Fix AddPNode::mach_bottom_type() to use more precise type for bailout. - Reset bottom_type for TypeNode in the split_thru_phi code. - Add missing bottom_type() method for mach node CMoveN (copied from CMoveP). - Don't generate CMove nodes when a phi has DecodeN/EncodeP users since they could be candidates for split_thru_phi optimization. - Add missing checks for LoadN, LoadNKlass. - Fix TypeNarrowOop::xmeet() - return BOTTOM when meet with pointer types instead of error. And add missing NarrowOop cases. - Fix ConnectionGraph::split_AddP(). - Add early cut in PredictedCallGenerator::generate() to prevent parsing a subclass method call if the subclass type check failed.

EVALUATION AddPNode::bottom_type() and AddPNode::mach_bottom_type() produce different result since the type of in(Address) edge is more precise (TypPtr::NotNull) then the type of in(Base) edge. The split_thru_phi code in loopopt.cpp and in memory.cpp sets igvn.type(x) but does not reset bottom_type for TypeNode* x. As result TypeNode::_type is not reset. Missing bottom_type() method for mach node CMoveN. In ConnectionGraph::split_AddP() the type 't' could be subclass of 'base_t'. As result t->offset() could be large then base_t's size and it will cause the failure in add_offset() with narrow oops since TypeOopPtr() constructor verifies correctness of the offset. It could happend on subclass's branch (from the type profiling inlining) which was not eliminated during parsing since the exactness of the allocation type was not propagated to the subclass type check. Do nothing for such AddP node and don't process its users since this code branch will go away.

EVALUATION http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/c3e045194476