RFR 8178150: Regression in logic for handling inference stuck constraints
Vicente Romero
vicente.romero at oracle.com
Wed Jun 13 12:43:12 UTC 2018
On 06/13/2018 04:05 AM, Maurizio Cimadamore wrote:
>
> Resurrecting this old thread.
>
> There haven't been many comments on the spec side of this.
>
> I'm tempted to go ahead and submit (after proper re-testing) one last
> iteration of this patch. The focus would be on fixing the regression
> in stuck constraint resolution that has been affecting the compiler
> for a while - I plan to leave performance and spec-related issues as
> part of follow up tasks - I don't think we came across on evidence
> that this patch regresses on either fronts.
>
> Thoughts?
>
go for it :)
> Maurizio
>
Vicente
>
> On 25/10/17 01:33, Maurizio Cimadamore wrote:
>>
>>
>>
>> On 25/10/17 00:43, Maurizio Cimadamore wrote:
>>> lead to the same set of input variables; there is actually a very
>>> tiny difference, in that the latter constraint doesn't add in the
>>> input variable set the input variables of the constraints coming
>>> from the return expressions of the lambda - and that's because, I
>>> think, you can reason about exceptions being thrown by a lambda even
>>> if some return expressions are 'stuck'. Which means I guess, at
>>> least hypothetically, you could write a test where the spec picks
>>> ‹/LambdaExpression/ →_/throws/ T› and decides to process that ahead
>>> of ‹/LambdaExpression/ → T› - while in javac the two happen at the
>>> same time (because javac doesn't have the distinction between these
>>> two constraints - throws constraints are evaluated as part of
>>> evaluating the lambda compatibility constraint).
>> Actually, it's slightly different - that is:
>>
>> ‹/LambdaExpression/ →_/throws/ T›
>>
>> has a _broader_ set of input variables than
>>
>> ‹/LambdaExpression/ → T›
>>
>> As the former includes as input variables all variables mentioned in
>> the return type of the function type derived from T.
>>
>> This reduces the mismatch even further - basically what the spec is
>> saying is that you don't want to process checked exception
>> constraints in cases where the target contains free variables,
>> because such variables might affect the set of thrown types by the
>> lambda.
>>
>> That said, I will have to think more about specific cases where the
>> spec would consider ‹/LambdaExpression/ →_// T› ahead of the
>> companion constraint ‹/LambdaExpression/ →_// throws T›, and see
>> what's the impact in terms of real code. From the looks of it this
>> looks like (i) something that was there even before the regression
>> that this patch is attempting to fix and (ii) probably more in the
>> corner case territory; while non conformance issues should be treated
>> for what they are, I think there's enough of a case here to
>> investigate this as part of a followup issue?
>>
>> Maurizio
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20180613/6c856aed/attachment.html>
More information about the compiler-dev
mailing list