Skip to content

Circular mapped tuple hangs compiler #27881

Closed
@mattmccutchen

Description

@mattmccutchen

I ran into this by accident while working on this question.

TypeScript Version: master (54a5be1)

Search Terms: circular mapped tuple hang (plus the function names in the stack trace)

Code

export type Circular<T> = {[P in keyof T]: Circular<T>};
type tup = [number, number, number, number];

function foo(arg: Circular<tup>): tup {
  return arg;
}

Expected behavior: No hang.

Actual behavior: Compiler hangs with stack trace:

    at eval (eval at some (typescript/built/local/tsc.js:625:17), <anonymous>:1:1)
    at Object.some (typescript/built/local/tsc.js:625:17)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at typescript/built/local/tsc.js:41848:156
    at Object.some (typescript/built/local/tsc.js:627:25)
    at isTypeReferenceWithGenericArguments (typescript/built/local/tsc.js:41848:74)
    at getRelationKey (typescript/built/local/tsc.js:41886:17)
    at isTypeRelatedTo (typescript/built/local/tsc.js:40517:44)
    at checkTypeRelatedToAndOptionallyElaborate (typescript/built/local/tsc.js:39988:17)
    at checkTypeAssignableToAndOptionallyElaborate (typescript/built/local/tsc.js:39985:20)
    at checkReturnStatement (typescript/built/local/tsc.js:53735:25)
    at checkSourceElement (typescript/built/local/tsc.js:55220:28)
    at Object.forEach (typescript/built/local/tsc.js:182:30)
    at checkBlock (typescript/built/local/tsc.js:52831:20)
    at checkSourceElement (typescript/built/local/tsc.js:55199:28)
    at checkFunctionOrMethodDeclaration (typescript/built/local/tsc.js:52521:13)
    at checkFunctionDeclaration (typescript/built/local/tsc.js:52405:17)
    at checkSourceElement (typescript/built/local/tsc.js:55196:28)
    at Object.forEach (typescript/built/local/tsc.js:182:30)
    at checkSourceFileWorker (typescript/built/local/tsc.js:55400:20)
    at checkSourceFile (typescript/built/local/tsc.js:55372:13)
    at getDiagnosticsWorker (typescript/built/local/tsc.js:55446:17)
    at Object.getDiagnostics (typescript/built/local/tsc.js:55432:24)
    at typescript/built/local/tsc.js:85685:85
    at runWithCancellationToken (typescript/built/local/tsc.js:85651:24)
    at getSemanticDiagnosticsForFileNoCache (typescript/built/local/tsc.js:85674:20)
    at getAndCacheDiagnostics (typescript/built/local/tsc.js:85922:26)
    at getSemanticDiagnosticsForFile (typescript/built/local/tsc.js:85671:20)
    at typescript/built/local/tsc.js:85619:24
    at Object.flatMap (typescript/built/local/tsc.js:458:25)
    at getDiagnosticsHelper (typescript/built/local/tsc.js:85615:56)
    at Object.getSemanticDiagnostics (typescript/built/local/tsc.js:85626:20)
    at Object.emitFilesAndReportErrors (typescript/built/local/tsc.js:88873:46)
    at performCompilation (typescript/built/local/tsc.js:90800:29)
    at Object.executeCommandLine (typescript/built/local/tsc.js:90742:17)
    at Object.<anonymous> (typescript/built/local/tsc.js:90925:4)
    at Module._compile (module.js:650:14)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Function.Module.runMain (module.js:694:10)
    at startup (bootstrap_node.js:204:16)
    at bootstrap_node.js:625:3

Playground Link: N/A, the playground hangs before I can click the "Share" button. 😄

Related Issues: none found

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScriptFixedA PR has been merged for this issue

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions