While running some Graal unit tests I hit this:
=== Meet Not Symmetric ===
t = stable:narrowoop: java/lang/reflect/Member:TopPTR *,iid=top (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop)
this= stable:narrowoop: java/lang/reflect/Member:TopPTR *,iid=top (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop) (speculative=stable:narrowoop: java/lang/reflect/AccessibleObject:TopPTR *,iid=top (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop))
mt=(t meet this)= stable:narrowoop: java/lang/reflect/Member:TopPTR *,iid=top (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop) (speculative=stable:narrowoop: java/lang/reflect/Member:TopPTR * (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop))
t_dual= narrowoop: java/lang/reflect/Member *[int:>=0] *
this_dual= narrowoop: java/lang/reflect/Member *[int:>=0] * (speculative=narrowoop: java/lang/reflect/AccessibleObject *[int:>=0] *)
mt_dual= narrowoop: java/lang/reflect/Member *[int:>=0] * (speculative=narrowoop: java/lang/reflect/Member *,iid=top[int:>=0] *)
mt_dual meet t_dual= narrowoop: java/lang/reflect/Member *[int:>=0] *
mt_dual meet this_dual= narrowoop: java/lang/reflect/Member *[int:>=0] * (speculative=narrowoop: java/lang/Object *[int:>=0] *)
The mismatch should have been filtered out by interface_vs_oop because the mismatch is in the speculative type but the overriding of interface_vs_oop by TypeAryPtr hides to special logic for checking the speculative type.
=== Meet Not Symmetric ===
t = stable:narrowoop: java/lang/reflect/Member:TopPTR *,iid=top (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop)
this= stable:narrowoop: java/lang/reflect/Member:TopPTR *,iid=top (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop) (speculative=stable:narrowoop: java/lang/reflect/AccessibleObject:TopPTR *,iid=top (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop))
mt=(t meet this)= stable:narrowoop: java/lang/reflect/Member:TopPTR *,iid=top (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop) (speculative=stable:narrowoop: java/lang/reflect/Member:TopPTR * (inline_depth=InlineDepthTop)[int:max..0]:TopPTR *,iid=top (inline_depth=InlineDepthTop))
t_dual= narrowoop: java/lang/reflect/Member *[int:>=0] *
this_dual= narrowoop: java/lang/reflect/Member *[int:>=0] * (speculative=narrowoop: java/lang/reflect/AccessibleObject *[int:>=0] *)
mt_dual= narrowoop: java/lang/reflect/Member *[int:>=0] * (speculative=narrowoop: java/lang/reflect/Member *,iid=top[int:>=0] *)
mt_dual meet t_dual= narrowoop: java/lang/reflect/Member *[int:>=0] *
mt_dual meet this_dual= narrowoop: java/lang/reflect/Member *[int:>=0] * (speculative=narrowoop: java/lang/Object *[int:>=0] *)
The mismatch should have been filtered out by interface_vs_oop because the mismatch is in the speculative type but the overriding of interface_vs_oop by TypeAryPtr hides to special logic for checking the speculative type.
- duplicates
-
JDK-8141551 C2 can not handle returns with incompatible interface arrays
-
- Resolved
-