RFR: JDK-8222035: Unused variable declaration causes inference error

Vicente Romero vicente.romero at oracle.com
Wed Apr 10 17:25:57 UTC 2019


I think that given that there are raw types in the picture and that 
there is a workaround we should be fine going for the change,

Vicente

On 4/10/19 1:03 PM, Liam Miller-Cushon wrote:
> I did some testing and a found a single example where this fix rejects 
> code that was previously accepted. Is this change expected?
>
> (I don't have any concerns either way: this pattern is not common, it 
> involves rawtypes, and there's an easy work-around.)
>
> ```
> import java.util.Map;
> import java.util.function.Function;
> import java.util.stream.Collector;
> import java.util.stream.Stream;
>
> abstract class A {
>
>   abstract static class T<K> {
>     abstract String f();
>   }
>
>   abstract <E> Function<E, E> id();
>
>   abstract static class ImmutableMap<K, V> implements Map<K, V> {}
>
>   abstract <T, K, V> Collector<T, ?, ImmutableMap<K, V>> toImmutableMap(
>       Function<? super T, ? extends K> k, Function<? super T, ? 
> extends V> v);
>
>   ImmutableMap<String, T<?>> test(Stream<T> stream) {
>     return stream.collect(toImmutableMap(T::f, id()));
>   }
> }
> ```
>
> A.java:20: error: incompatible types: cannot infer type-variable(s) 
> T,K,V,E
>     return stream.collect(toImmutableMap(T::f, id()));
>                          ^
>     (argument mismatch; Function<A.T,A.T> cannot be converted to 
> Function<? super A.T,? extends A.T<?>>)
>   where T,K,V,E are type-variables:
>     T extends Object declared in method 
> <T,K,V>toImmutableMap(Function<? super T,? extends K>,Function<? super 
> T,? extends V>)
>     K extends Object declared in method 
> <T,K,V>toImmutableMap(Function<? super T,? extends K>,Function<? super 
> T,? extends V>)
>     V extends Object declared in method 
> <T,K,V>toImmutableMap(Function<? super T,? extends K>,Function<? super 
> T,? extends V>)
>     E extends Object declared in method <E>id()
> 1 error
>
> On Tue, Apr 9, 2019 at 2:24 PM Vicente Romero 
> <vicente.romero at oracle.com <mailto:vicente.romero at oracle.com>> wrote:
>
>     thanks,
>     Vicente
>
>     On 4/9/19 4:37 PM, Maurizio Cimadamore wrote:
>     > Looks good!
>     >
>     > Maurizio
>     >
>     > On 09/04/2019 18:17, Vicente Romero wrote:
>     >> Hi Maurizio,
>     >>
>     >> Thanks for your comments, please see the updated webrev at [1]
>     >>
>     >> Vicente
>     >>
>     >> [1] http://cr.openjdk.java.net/~vromero/8222035/webrev.01/
>     >>
>     >>
>     >>
>     >> On 4/9/19 12:56 PM, Maurizio Cimadamore wrote:
>     >>> Looks good - few comments:
>     >>>
>     >>> * there's an HashSet still used at line 404:
>     >>>
>     >>> Set<Type> deps = minMap.getOrDefault(t.qtype, new
>     >>> HashSet<>(Collections.singleton(t.qtype)));
>     >>>
>     >>> This should be fixed too.
>     >>>
>     >>> * In this statement:
>     >>>
>     >>>
>     ((UndetVar)asUndetVar(eq)).setInst(inferenceContext.asInstType(t));
>     >>>
>     >>> It would be better to cache the instantiated type outside the
>     loop
>     >>> since it doesn't change.
>     >>>
>     >>> Maurizio
>     >>>
>     >>>
>     >>> On 09/04/2019 17:51, Vicente Romero wrote:
>     >>>> Hi all,
>     >>>>
>     >>>> Please review fix for [1] at [2]. The issue is random and
>     very hard
>     >>>> to reproduce with a regression test. Apart from the use of
>     >>>> non-ordering preserving data structures, the root cause was
>     early
>     >>>> resolution of the inference context which was leading, in this
>     >>>> case, to inexact instantiation of some inference variables.
>     >>>>
>     >>>> Thanks,
>     >>>> Vicente
>     >>>>
>     >>>> [1] https://bugs.openjdk.java.net/browse/JDK-8222035
>     >>>> [2] http://cr.openjdk.java.net/~vromero/8222035/webrev.00/
>     >>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20190410/0844c111/attachment-0001.html>


More information about the compiler-dev mailing list