On Sep 12, 2013, at 5:44 PM, David Chase <david.r.ch...@oracle.com> wrote:
> Do these sibling bugs have numbers? Yes, 8022701. I just updated the bug to explain their common genesis. > And I take it you would like to see > > 1) a test enhanced with ASM to do all 3 variants of this Yes, please. The case of "no such field" does not have a direct cause from lambda expressions AFAIK, but it can occur with "raw" CONSTANT_MethodHandles. (It would be reasonable for javac to emit CONSTANT_MH's for fields in some very limited circumstances, but I'll bet it doesn't.) > 2) DO attach the underlying cause Yes. Read the javadoc for ExceptionInInitializerError for an example of why users want the underlying cause for linkage errors. (Golly, I wonder what happens if resolution of a CONSTANT_MethodHandle tries to touch a class with a booby-trapped <clinit>. I hope it's the case that the ExceptionInInitializerError just passes straight up the stack. But if it were to get wrapped in a ROE of some sort, it would probably bubble up as an IAE. Could be a charming exploration. Actually, no, I don't want to go in there. Getting all possible linkage errors correct is fine, but we have more important things to do.) — John > David > > On 2013-09-12, at 5:35 PM, John Rose <john.r.r...@oracle.com> wrote: > >> It looks good. I have three requests. >> >> Regarding this comment: >> + * See MethodSupplier.java to see how to produce these bytes. >> + * They encode that class, except that method m is private, not public. >> >> The recipe is incomplete, since it does not say which bits to tweak to make >> m private. Please add that step to the comments more explicitly, or if >> possible to the code (so bogusMethodSupplier is a clean copy of the od >> output). I suppose you could ask sed to change the byte for you. That will >> make this test a better example for future tests, and make it easier to >> maintain if javac output changes. The high road to use would be asm, >> although for a single byte tweak od works OK. >> >> Also, this bug has two twins. The same thing will happen with >> NoSuchMethodE* and NoSuchFieldE*. Can you please make fixes for those guys >> also? >> >> FTR, see MemberName.makeAccessException() for logic which maps the other >> way, from *Error to *Exception. I don't see a direct way to avoid the >> double mapping (Error=>Exception=>Error) when it occurs. >> >> For the initCause bit we should do this: >> >> } catch (IllegalAccessException ex) { >> Error err = new IllegalAccessError(ex.getMessage()); >> err.initCause(ex.getCause()); // reuse underlying cause of ex >> throw err; >> } ... and for NSME and NSFE... >> >> That way users can avoid the duplicate exception but can see any underlying >> causes that the JVM may include. >> >> Thanks for untangling this! >> >> — John >> >> On Sep 12, 2013, at 12:17 PM, David Chase <david.r.ch...@oracle.com> wrote: >> >>> The test is adapted from the test in the bug report. >>> The headline on the bug report is wrong -- because it uses reflection in >>> the test to do the invocation, >>> the thrown exception is wrapped with InvocationTargetException, which is >>> completely correct. >>> HOWEVER, the exception inside the wrapper is the wrong one. >>> >>> The new test checks the exception in both the reflective-invocation and >>> plain-invocation cases, >>> and also checks both a method handle call (which threw the wrong exception) >>> and a plain >>> call (which threw, and throws, the right exception). >>> >>> The test also uses a tweaked classloader to substitute the borked bytecodes >>> necessary to get >>> the error, so it is not only shell-free, it can also be run outside jtreg. >>> >>> On 2013-09-12, at 2:34 PM, Christian Thalinger >>> <christian.thalin...@oracle.com> wrote: >>> >>>> >>>> On Sep 12, 2013, at 11:28 AM, David Chase <david.r.ch...@oracle.com> wrote: >>>> >>>>> New webrev, commented line removed: >>>>> http://cr.openjdk.java.net/~drchase/8022701/webrev.03/ >>>> >>>> I think the change is good given that the tests work now. Is your test >>>> derived from the test in the bug report? >>>> >>>> And it would be good if John could also have a quick look (just be to be >>>> sure). >>>> >>>> -- Chris >>>> >>>>> >>>>> On 2013-09-12, at 1:53 PM, David Chase <david.r.ch...@oracle.com> wrote: >>>>> >>>>>> I believe it produced extraneous output -- it was not clear to me that >>>>>> it was either necessary or useful to fully describe all the converted >>>>>> exceptions that lead to the defined exception being thrown. The >>>>>> commented line should have just been removed (I think). >>>>>> >>>>>> On 2013-09-12, at 1:24 PM, Christian Thalinger >>>>>> <christian.thalin...@oracle.com> wrote: >>>>>> >>>>>>> + // err.initCause(ex); >>>>>>> >>>>>>> Why is this commented? >>>>>>> >>>>>>> -- Chris >>>>> >>>> >>> >>> _______________________________________________ >>> mlvm-dev mailing list >>> mlvm-...@openjdk.java.net >>> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev >> >