On Sep 19, 2013, at 9:57 AM, David Chase <david.r.ch...@oracle.com> wrote:

> Recommended changes made:
> 
> http://cr.openjdk.java.net/~drchase/8022701/webrev.04/

Looks good.  Thanks for using ASM.

> 
> Test with jtreg (for pass and for induced failure) on MacOS,
> not sure what additional other testing is desired since it is entirely in the 
> libraries.
> 
> I included code to handle the case of a broken field-referencing methodhandle,
> but did not test it because there's no syntax for these in Java, nor is their 
> creation
> well-documented.
> 
> David
> 
> 
> On 2013-09-13, at 12:02 AM, John Rose <john.r.r...@oracle.com> wrote:
> 
>> 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
>>>> 
>>> 
>> 
> 
> _______________________________________________
> mlvm-dev mailing list
> mlvm-...@openjdk.java.net
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev

Reply via email to