Hi,

JDK-8178387 subtly and inadvertently changed what exception was being thrown by LambdaForm.compileToBytecode in certain cases - this patch reverts this simplification and adds a comment to warn against future attempts to
simplify too much..

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

diff -r 9363dd4a4fb9 src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java --- a/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Tue Apr 11 18:57:46 2017 +0200 +++ b/src/java.base/share/classes/java/lang/invoke/InvokerBytecodeGenerator.java Tue Apr 11 21:35:59 2017 +0200
@@ -673,9 +673,7 @@
     /**
      * Generate customized bytecode for a given LambdaForm.
      */
-    static MemberName generateCustomizedCode(LambdaForm form) {
-        final MethodType invokerType = form.methodType();
-
+ static MemberName generateCustomizedCode(LambdaForm form, MethodType invokerType) {
         MemberName pregenerated = lookupPregenerated(form, invokerType);
if (pregenerated != null) return pregenerated; // pre-generated bytecode

diff -r 9363dd4a4fb9 src/java.base/share/classes/java/lang/invoke/LambdaForm.java --- a/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Tue Apr 11 18:57:46 2017 +0200 +++ b/src/java.base/share/classes/java/lang/invoke/LambdaForm.java Tue Apr 11 21:35:59 2017 +0200
@@ -847,9 +847,10 @@
         if (vmentry != null && isCompiled) {
             return;  // already compiled somehow
         }
- assert(vmentry == null || vmentry.getMethodType().basicType().equals(methodType())); + MethodType invokerType = methodType(); // forces IAE to happen outside try-catch block + assert(vmentry == null || vmentry.getMethodType().basicType().equals(invokerType));
         try {
- vmentry = InvokerBytecodeGenerator.generateCustomizedCode(this); + vmentry = InvokerBytecodeGenerator.generateCustomizedCode(this, invokerType);
             if (TRACE_INTERPRETER)
                 traceInterpreter("compileToBytecode", this);
             isCompiled = true;


Thanks!

/Claes

Reply via email to