[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-hotspot-runtime-dev
Subject:    Re: RFR 8174954: Parameter target type can yield successful access after a module read edge or a pac
From:       Karen Kinnear <karen.kinnear () oracle ! com>
Date:       2017-06-09 18:46:08
Message-ID: B21D6B25-D5E3-475A-B544-EE7EE03A1624 () oracle ! com
[Download RAW message or body]

Harold,

Running behind so I have not looked at your fix. I do agree with Lois on the \
interpretation of the expected behavior and probable way to track this.

thanks for tackling this,
Karen

> On Jun 8, 2017, at 1:21 PM, Lois Foltan <lois.foltan@oracle.com> wrote:
> 
> Hi Harold,
> 
> I like your fix but I think there may be an issue, would like to know your opinion. \
> If I add another identical but distinct invokedynamic call in p5/c5.java, something \
> like 
> 29 public class c5 {
> static final String printDescription = "In c5's method5 with param = ";
> 30     public void method5(p2.c2 param,Module c2Module) { \
> System.out.println(printDescription  + param); methodAddReadEdge(c2Module); \
> System.out.println(PrintDescription + param);  } 31
> 32     public void methodAddReadEdge(Module m) {
> 33         // Add a read edge from p5/c5's module (first_mod) to second_mod
> 34         c5.class.getModule().addReads(m);
> 35     }
> 36 }
> 37
> 
> c5's method5 should end up with 2 invokedynamic bytecodes pointing at the same \
> constant pool index 
> 4: invokedynamic #3,  0              // InvokeDynamic \
>                 #0:makeConcatWithConstants:(Lp2/c2;)Ljava/lang/String;
> 9: invokevirtual #4                  // Method \
>                 java/io/PrintStream.println:(Ljava/lang/String;)V
> 12: aload_0
> 13: aload_2
> 14: invokevirtual #5                  // Method \
>                 methodAddReadEdge:(Ljava/lang/Module;)V
> 17: getstatic     #2                  // Field \
>                 java/lang/System.out:Ljava/io/PrintStream;
> 20: aload_1
> 21: invokedynamic #3,  0              // InvokeDynamic \
> #0:makeConcatWithConstants:(Lp2/c2;)Ljava/lang/String; 
> 
> The invokedynamic at #4 should fail due to an IAE and continue to fail, but the \
> invokedynamic at #21 should succeed.  With your fix the invokedynamic at #21 fails \
> with the cached exception.  I suspect what is happening is that the exception is \
> stored at the original invokedynamic's CP index and not the rewritten \
> invokedynamic's cpCache index.  Can you take a look at this and confirm?  I could \
> be wrong, but if I am I think this is worth adding to the test. 
> Thanks,
> Lois
> 
> On 6/8/2017 9:33 AM, harold seigel wrote:
> > Hi,
> > 
> > Please review this JDK-10 fix for JDK-8174954.  For invokedynamic, the JVM \
> > currently does not conform to the following module related upcoming JVM Spec \
> > change to 5.4.3 Resolution: 
> > This means that a class in one module that attempts to access, via
> > resolution of a symbolic reference in its run-time constant pool, an
> > unexported public type in a different module will always receive the
> > same error indicating an inaccessible type ( §5.4.4), even if the
> > Java SE Platform API is used to dynamically export the public type's
> > package at some time after the class's first attempt.
> > 
> > This RFR fixes this issue by caching the LinkageError exception from the initial \
> > resolution failure.  Subsequent resolution attempts will then just throw the \
> > cached exception instead of actually re-doing the resolution, and so will get the \
> > same failure even if the module graph has been changed. 
> > Note that this fix also fixes JDK-8174942 \
> > <https://bugs.openjdk.java.net/browse/JDK-8174942>. 
> > Open Webrev: http://cr.openjdk.java.net/~hseigel/bug_8174954/webrev/
> > 
> > JBS Bug: https://bugs.openjdk.java.net/browse/JDK-8174954
> > 
> > The fix was tested with JCK Lang, VM, and API/java_lang tests, the JTreg hotspot, \
> > java/io, java/lang, java/util and other tests, the co-located NSK tests, RBT \
> > tests, and with JPRT.  The new tests (based on Lois's test cases) were run with \
> > and without -Xcomp. 
> > Thanks, Harold
> > 
> 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic