Skip to content

Circular mapped tuple hangs compiler #27881

Closed

Description

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

Activity

  1. jcalz commented on Oct 14, 2018

    @jcalz
    Contributor

    ⚠☣ Playground link ☢ ☠

  2. added
    BugA bug in TypeScript
    CrashFor flagging bugs which are compiler or service crashes or unclean exits, rather than bad output
    and removed
    CrashFor flagging bugs which are compiler or service crashes or unclean exits, rather than bad output
    on Oct 14, 2018
  3. DanielRosenwasser commented on Oct 14, 2018

    @DanielRosenwasser
    Member

    Yeah, please don't try this in the playground unless you want to lose some time.

  4. locked as resolved and limited conversation to collaborators on Oct 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

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