RFR: 8325859: potential information loss during type inference

Vicente Romero vromero at openjdk.org
Fri May 2 18:03:50 UTC 2025


On Fri, 2 May 2025 17:18:05 GMT, Vicente Romero <vromero at openjdk.org> wrote:

> When an inference context (`IC`) is minimized, the minimized inference context (`MIC`) contains a proper subset of `IC's` inference vars (`IC_IV`). In other words there will be at least one inference variable `T` that belongs to `IC_IV` which doesn't belong to the minimized context inference variable's set (`MIC_IV`). MIC can be propagated to another inference context (AIC) as part of the type inference algo. If at any moment a type containing `T` needs, for example, to be instantiated `AIC` won't be able to perform that operation as it lacks the information to realize that `T` is a free variable it was supposed to know about hadn't a minimization step been performed. This PR is proposing to fix this issue without reducing the universe of inference contexts we apply the minimization algo to.
> 
> We are basically proposing to add a field to class InferenceContext which will be supplementary inference context that can be used to look for additional information if necessary. Also when registering a free type listener to an inference context, it could be that it won't be registered in the inference context the client could expect but in a supplementary inference context if it is found out that it contains and instantiation to all the free variables related to the listener. See also some comments inlined in the code,
> 
> TIA

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/InferenceContext.java line 271:

> 269:         if (next != null) {
> 270:             HasTypeVars hasTypeVars = new HasTypeVars();
> 271:             while (next != null && hasTypeVars.visit(result)) {

I think that we should be fine just going for the next supplementaryIC instead of traversing the whole list here. Same for the process to add free listeners, but in the first version I preferred to err on the correctness / completeness side. If we decide to visit more than one chained supplementary IC we can still do some improvements to try to reduce the number of supplementary ICs visited to a minimum

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25011#discussion_r2071967520


More information about the compiler-dev mailing list