microsoft / microsoft/TypeScript

Crash: optional chain + tagged template panics the optional-chain transform

Aperta
#63,965 1 commento 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Bug
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
2g 4h
PR unite (30g)
132

Descrizione

🔎 Search Terms

flattenChain tagged template, KindTaggedTemplateExpression, "Unhandled case in Node.Expression", "isOptionalChain", optional chain tagged template crash, e?.``(

🕗 Version & Regression Information
  • This is a crash
  • This is the behavior in every version I tried: TypeScript 6.0.3 (JS) and 7.1.0-dev (main, Go)
  • I have reviewed the FAQ for entries about optional chaining and tagged templates. Those entries do not cover this compiler crash.
⏯ Playground Link

Not useful here. The crash needs ES2020 optional-chain emit. Use the CLI command below.

💻 Code
e?.``(
🙁 Actual behavior
panic: Unhandled case in Node.Expression: KindTaggedTemplateExpression [recovered, repanicked]

goroutine 13 [running]:
sync.(*WaitGroup).Go.func1.1()
        sync/waitgroup.go:251 +0x48
panic({0x10417d8e0?, 0x2b3e77a92750?})
        runtime/panic.go:860 +0x12c
github.com/microsoft/TypeScript/tsc/internal/ast.(*Node).Expression(...)
        github.com/microsoft/TypeScript/tsc/internal/ast/ast.go:383 +0x718
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.flattenChain(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/optionalchain.go:143 +0x1c4
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*optionalChainTransformer).visitOptionalExpression(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/optionalchain.go:151 +0x38
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*optionalChainTransformer).visitCallExpression(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/optionalchain.go:37 +0x190
github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms.(*optionalChainTransformer).visit(...)
        github.com/microsoft/TypeScript/tsc/internal/transformers/estransforms/optionalchain.go:20 +0xd0
github.com/microsoft/TypeScript/tsc/internal/ast.(*NodeVisitor).VisitNode(...)
        github.com/microsoft/TypeScript/tsc/internal/ast/visitor.go:51 +0x30
github.com/microsoft/TypeScript/tsc/internal/ast.(*ExpressionStatement).VisitEachChild(...)
        github.com/microsoft/TypeScript/tsc/internal/ast/ast_generated.go:1592 +0x30
... 74 lines truncated ...
github.com/microsoft/TypeScript/tsc/internal/compiler.(*emitter).emitJSFile(...)
        github.com/microsoft/TypeScript/tsc/internal/compiler/emitter.go:200 +0x198
github.com/microsoft/TypeScript/tsc/internal/compiler.(*emitter).emit(...)
        github.com/microsoft/TypeScript/tsc/internal/compiler/emitter.go:50 +0xec
github.com/microsoft/TypeScript/tsc/internal/compiler.(*Program).Emit.func2()
        github.com/microsoft/TypeScript/tsc/internal/compiler/program.go:1851 +0x1c0
🙂 Expected behavior

The compiler should not crash 😄

Additional information about the issue

Disclosure: This crash was found with a custom mutation fuzzer and AI assistance (Kimi K3). The input was minimized and then verified by hand against TypeScript 7.1.0-dev (main) and TypeScript 6.0.3.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia da tsc/internal/transformers/estransforms/optionalchain.go, in particolare da flattenChain e visitOptionalExpression, quindi esamina la gestione di Node.Expression in tsc/internal/ast/ast.go. Esegui l’esempio ridotto e?.``( tramite la CLI con l’emissione optional-chain ES2020. Il lavoro è concluso quando il compilatore non va più in panic con questo input.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
go, typescript
Ambito
compilers
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Attiva
Chiarezza
Specificata chiaramente
Idoneità per principianti
76/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.