From 9cad4bae6b6a57b5ef622e97b63a8785fcb2c486 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 5 Jun 2023 22:37:20 +0000 Subject: [PATCH] Cherry-pick PR #54507 into release-5.1 Component commits: cffa5157a7 Ensure we don't overwrite computed CouldContainTypeVariables in new optimization --- src/compiler/checker.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 0715f58e71429..59e5c3e8aee45 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -18768,8 +18768,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // If none of the type arguments for the outer type parameters contain type variables, it follows // that the instantiated type doesn't reference type variables. if (result.flags & TypeFlags.ObjectFlagsType && !((result as ObjectFlagsType).objectFlags & ObjectFlags.CouldContainTypeVariablesComputed)) { - (result as ObjectFlagsType).objectFlags |= ObjectFlags.CouldContainTypeVariablesComputed | - (some(typeArguments, couldContainTypeVariables) ? ObjectFlags.CouldContainTypeVariables : 0); + const resultCouldContainTypeVariables = some(typeArguments, couldContainTypeVariables); + // The above check may have caused the result's objectFlags to update if the result is referenced via typeArguments. + if (!((result as ObjectFlagsType).objectFlags & ObjectFlags.CouldContainTypeVariablesComputed)) { + (result as ObjectFlagsType).objectFlags |= ObjectFlags.CouldContainTypeVariablesComputed | + (resultCouldContainTypeVariables ? ObjectFlags.CouldContainTypeVariables : 0); + } } target.instantiations.set(id, result); }