Skip to content

Circular mapped tuple hangs compiler #27881

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
mattmccutchen opened this issue Oct 13, 2018 · 2 comments
Closed

Circular mapped tuple hangs compiler #27881

mattmccutchen opened this issue Oct 13, 2018 · 2 comments
Assignees
Labels
Bug A bug in TypeScript Fixed A PR has been merged for this issue

Comments

@mattmccutchen
Copy link
Contributor

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

@jcalz
Copy link
Contributor

jcalz commented Oct 14, 2018

⚠☣ Playground link ☢ ☠

@DanielRosenwasser DanielRosenwasser added Bug A bug in TypeScript Crash For flagging bugs which are compiler or service crashes or unclean exits, rather than bad output and removed Crash For flagging bugs which are compiler or service crashes or unclean exits, rather than bad output labels Oct 14, 2018
@DanielRosenwasser
Copy link
Member

DanielRosenwasser commented Oct 14, 2018

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug A bug in TypeScript Fixed A PR has been merged for this issue
Projects
None yet
Development

No branches or pull requests

4 participants