Skip to content

Commit d059791

Browse files
committed
Track if incomplete variances have been observed
1 parent de4a166 commit d059791

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

src/compiler/checker.ts

+13-5
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,7 @@ namespace ts {
348348
let inlineLevel = 0;
349349
let varianceLevel = 0;
350350
let nestedVarianceSymbols: Symbol[] | undefined;
351+
let incompleteVariancesObserved = false;
351352
let currentNode: Node | undefined;
352353

353354
const emptySymbols = createSymbolTable();
@@ -20445,15 +20446,22 @@ namespace ts {
2044520446
varianceLevel--;
2044620447
// Recursive invocations of getVariancesWorker occur when two or more types circularly reference each
2044720448
// other. In such cases, the nested invocations might observe in-process variance computations, i.e.
20448-
// cases where getVariancesWorker returns emptyArray, and thus might compute incomplete variances. For
20449-
// this reason we clear (and thus re-compute) the results of nested variance computations and only
20450-
// permanently record the outermost result. See #44572.
20451-
if (varianceLevel === 0 && nestedVarianceSymbols) {
20452-
for (const sym of nestedVarianceSymbols) getSymbolLinks(sym).variances = undefined;
20449+
// cases where getVariancesWorker returns emptyArray. If that happens we clear (and thus re-compute) the
20450+
// results of nested variance computations and only permanently record the outermost result. See #44572.
20451+
if (varianceLevel === 0) {
20452+
if (nestedVarianceSymbols && incompleteVariancesObserved) {
20453+
for (const sym of nestedVarianceSymbols) {
20454+
getSymbolLinks(sym).variances = undefined;
20455+
}
20456+
}
2045320457
nestedVarianceSymbols = undefined;
20458+
incompleteVariancesObserved = false;
2045420459
}
2045520460
tracing?.pop();
2045620461
}
20462+
else {
20463+
incompleteVariancesObserved ||= links.variances === emptyArray;
20464+
}
2045720465
return links.variances;
2045820466
}
2045920467

0 commit comments

Comments
 (0)