RFR 8224068: [lworld] JCK api/java_lang/invoke/MethodHandles/Lookup/ExceptionsTests crashes

Harold Seigel harold.seigel at oracle.com
Fri May 17 18:12:33 UTC 2019


Hi,

Please review the following small fix:

Open Webrev: 
http://cr.openjdk.java.net/~hseigel/lworld_8224068/webrev/index.html

JBS Bug: https://bugs.openjdk.java.net/browse/JDK-8224068

The failing test calls MethodHandles.findConstructor(), looking for a 
constructor with a non-null return type.  The test expects this to fail 
with a NoSuchMethodError exception because no such constructors exist.

Method findConstructor() calls MethodHandles.resolveOrFail() to find the 
method handle with ref_kind REF_newInvokeSpecial.  This creates a 
MemberName object.  But new code added for JDK-8222787 
<https://bugs.openjdk.java.net/browse/JDK-8222787>detects that the 
method is named <init> and has a return type.  So, it sets the 
MemberName flags to be IS_METHOD | REF_newInvokeSpecial. When this 
MemberName object is eventually passed to the JVM 
MethodHandles::resolve_MemberName() function, it asserts because it 
expects only constructors, not methods, to have ref_kind 
REF_newInvokeSpecial.

The simplest fix for this seemed to be to just throw NoSuchMethodError 
in findConstructor() if the constructor has a non-void return type.

The change was tested by running JCK lang, vm, and api/java_lang tests 
on Linux-x64, by running tiers 1-2 on Windows, Mac, and Linux-x64, and 
tiers 3-5 on Linux-x64.

Thanks, Harold




More information about the valhalla-dev mailing list