JDK-6837094 : False positive for "meet not symmetric" failure
  • Type: Bug
  • Component: hotspot
  • Sub-Component: compiler
  • Affected Version: hs16
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: solaris_10
  • CPU: x86
  • Submitted: 2009-05-04
  • Updated: 2011-03-08
  • Resolved: 2011-03-08
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
6u18Fixed 7Fixed hs16Fixed
The attached java program, when compiled and run with debug -server VM, aborts with a "Meet Not Symmetric" failure.

% bin/java -Xbatch -server Test
=== Meet Not Symmetric ===
t   =                   Interface:TopPTR *,iid=top[int:max..0]
this=                   Parent:TopPTR *,iid=top[int:1]
mt=(t meet this)=       Interface:TopPTR *[int:1]
t_dual=                 Interface *[int:>=0]
this_dual=              Parent *[int:1]
mt_dual=                Interface *,iid=top[int:1]
mt_dual meet t_dual=    Interface *[int:>=0]
mt_dual meet this_dual= java/lang/Object *[int:1]
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/type.cpp:532
# A fatal error has been detected by the Java Runtime Environment:
#  Internal Error (/BUILD_AREA/jdk7/hotspot/src/share/vm/opto/type.cpp:532), pid=2342, tid=10
#  Error: meet not symmetric
# JRE version: 7.0-b57
# Java VM: Java HotSpot(TM) Server VM (16.0-b02-fastdebug mixed mode solaris-x86 )

SUGGESTED FIX Have the meet not symmetric check recursively do the interface-vs-oop check on array subtypes.

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

EVALUATION Chuck Rasbold wrote: In Type::meet(), there is a check to see if the meet is of the interface-type vs. oop-type variety. If so, the symmetric check is sidestepped. However, the test program illustrates that the check is not skipped as it should be if the meet is between an array-of-interface vs. array-of-oop.