Skip to content

Runtime error compiling expo #870

Closed
@DanielRosenwasser

Description

@DanielRosenwasser
Member
git clone https://github.com/expo/expo --filter=blob:none
cd expo

No need to run yarn. Then:

/path/to/typescript-go/built/local/tsgo.exe -p . --extendedDiagnostics
panic: runtime error: slice bounds out of range [1:0]

goroutine 11831 [running]:
github.com/microsoft/typescript-go/internal/core.(*Pattern).Matches(...)
        D:/typescript-go/internal/core/pattern.go:28
github.com/microsoft/typescript-go/internal/core.FindBestPatternMatch[...]({0x4023f8b180?, 0xb, 0xc}, 0x7ff7ba1de310?, {0x4009e72cd0, 0xc})
        D:/typescript-go/internal/core/pattern.go:46 +0x208
github.com/microsoft/typescript-go/internal/checker.(*Checker).resolveExternalModule(0x402c941008, 0x400d9a2a20, {0x4009e72cd0, 0xc}, 0x0, 0x400d9a2a20, 0x7?)
        D:/typescript-go/internal/checker/checker.go:14299 +0x204
github.com/microsoft/typescript-go/internal/checker.(*Checker).resolveExternalModuleNameWorker(0x402c941008, 0x400d9a2a20, 0x400d9a2a20, 0x0, 0x0, 0x1)
        D:/typescript-go/internal/checker/checker.go:14271 +0x80
github.com/microsoft/typescript-go/internal/checker.(*Checker).mergeModuleAugmentation(0x402c941008, 0x400d9a2a20)
        D:/typescript-go/internal/checker/checker.go:1297 +0xc8
github.com/microsoft/typescript-go/internal/checker.(*Checker).initializeChecker(0x402c941008)
        D:/typescript-go/internal/checker/checker.go:1273 +0x938
github.com/microsoft/typescript-go/internal/checker.NewChecker({0x7ff7ba2a2058, 0x4000140000})
        D:/typescript-go/internal/checker/checker.go:1036 +0x6300
github.com/microsoft/typescript-go/internal/compiler.(*Program).createCheckers.func1.1()
        D:/typescript-go/internal/compiler/program.go:233 +0x30
github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue.func1()
        D:/typescript-go/internal/core/workgroup.go:39 +0x50
created by github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue in goroutine 11679
        D:/typescript-go/internal/core/workgroup.go:37 +0x7c
panic: runtime error: slice bounds out of range [1:0]

goroutine 11832 [running]:
github.com/microsoft/typescript-go/internal/core.(*Pattern).Matches(...)
        D:/typescript-go/internal/core/pattern.go:28
github.com/microsoft/typescript-go/internal/core.FindBestPatternMatch[...]({0x4023915d60?, 0xb, 0xc}, 0x7ff7ba1de310?, {0x4009e72cd0, 0xc})
        D:/typescript-go/internal/core/pattern.go:46 +0x208
github.com/microsoft/typescript-go/internal/checker.(*Checker).resolveExternalModule(0x402c2cb008, 0x400d9a2a20, {0x4009e72cd0, 0xc}, 0x0, 0x400d9a2a20, 0x7?)
        D:/typescript-go/internal/checker/checker.go:14299 +0x204
github.com/microsoft/typescript-go/internal/checker.(*Checker).resolveExternalModuleNameWorker(0x402c2cb008, 0x400d9a2a20, 0x400d9a2a20, 0x0, 0x0, 0x1)
        D:/typescript-go/internal/checker/checker.go:14271 +0x80
github.com/microsoft/typescript-go/internal/checker.(*Checker).mergeModuleAugmentation(0x402c2cb008, 0x400d9a2a20)
        D:/typescript-go/internal/checker/checker.go:1297 +0xc8
github.com/microsoft/typescript-go/internal/checker.(*Checker).initializeChecker(0x402c2cb008)
        D:/typescript-go/internal/checker/checker.go:1273 +0x938
github.com/microsoft/typescript-go/internal/checker.NewChecker({0x7ff7ba2a2058, 0x4000140000})
        D:/typescript-go/internal/checker/checker.go:1036 +0x6300
github.com/microsoft/typescript-go/internal/compiler.(*Program).createCheckers.func1.1()
        D:/typescript-go/internal/compiler/program.go:233 +0x30
github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue.func1()
        D:/typescript-go/internal/core/workgroup.go:39 +0x50
created by github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue in goroutine 11679
        D:/typescript-go/internal/core/workgroup.go:37 +0x7c

Activity

DanielRosenwasser

DanielRosenwasser commented on May 16, 2025

@DanielRosenwasser
MemberAuthor

I think something is going wrong where declare globals are being folded into pattern exports. If you comment out both declare globals in

  • package/expo/src/ts-declarations/global.d.ts
  • packages/expo-router/src/ts-declarations/expo-router-internal-globals.ts

then you'll end up with a separate panic:

panic: runtime error: index out of range [0] with length 0

goroutine 19463 [running]:
github.com/microsoft/typescript-go/internal/checker.(*Checker).isReachableFlowNodeWorker(0x40277ac008, 0x402870f6e0, 0x4039d4b848?, 0x68?)
        D:/typescript-go/internal/checker/flow.go:2491 +0x3b4
github.com/microsoft/typescript-go/internal/checker.(*Checker).isReachableFlowNode(0x40277ac008, 0x4023f75288)
        D:/typescript-go/internal/checker/flow.go:2459 +0x78
github.com/microsoft/typescript-go/internal/checker.(*Checker).functionHasImplicitReturn(0x40277ac008, 0x7ff6e62a61ec?)
        D:/typescript-go/internal/checker/checker.go:18700 +0x40
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkAllCodePathsInNonVoidFunctionReturnOrThrow(0x40277ac008, 0x4002aba320, 0x0)
        D:/typescript-go/internal/checker/checker.go:3488 +0x150
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkFunctionExpressionOrObjectLiteralMethodDeferred(0x40277ac008, 0x4002aba320)
        D:/typescript-go/internal/checker/checker.go:9709 +0x4c
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkDeferredNode(0x40277ac008, 0x7ff6e66b3520?)
        D:/typescript-go/internal/checker/checker.go:2279 +0xcc
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkDeferredNodes-range1(...)
        D:/typescript-go/internal/checker/checker.go:2264
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkDeferredNodes.(*OrderedSet[...]).Keys.func1(...)
        D:/typescript-go/internal/collections/ordered_map.go:117
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkDeferredNodes(0x40277ac008, 0x400a378e28?)
        D:/typescript-go/internal/checker/checker.go:2260 +0xc0
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceFile(0x40277ac008, {0x7ff6e66addb8, 0x7ff6e6b86280}, 0x400a33eb08)
        D:/typescript-go/internal/checker/checker.go:2067 +0x100
github.com/microsoft/typescript-go/internal/checker.(*Checker).GetEmitResolver(0x40277ac008, 0x400a33eb08, 0x8?)
        D:/typescript-go/internal/checker/checker.go:29832 +0x110
github.com/microsoft/typescript-go/internal/compiler.(*emitHost).GetEmitResolver(0x50005b808?, 0x400a33eb08, 0x0)
        D:/typescript-go/internal/compiler/emitHost.go:36 +0x5c
github.com/microsoft/typescript-go/internal/transformers.GetScriptTransformers(0x4027920780, {0x7ff6e66b30f8, 0x4019cdf6b0}, 0x400a33eb08)
        D:/typescript-go/internal/transformers/transformer.go:64 +0xcc
github.com/microsoft/typescript-go/internal/compiler.(*emitter).emitJSFile(0x4027c0aa20, 0x400a33eb08, {0x4027924070, 0x65}, {0x0, 0x0})
        D:/typescript-go/internal/compiler/emitter.go:57 +0x2f0
github.com/microsoft/typescript-go/internal/compiler.(*emitter).emit(0x4027c0aa20)
        D:/typescript-go/internal/compiler/emitter.go:40 +0x2c
github.com/microsoft/typescript-go/internal/compiler.(*Program).Emit.func2()
        D:/typescript-go/internal/compiler/program.go:656 +0x120
github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue.func1()
        D:/typescript-go/internal/core/workgroup.go:39 +0x50
created by github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue in goroutine 1
        D:/typescript-go/internal/core/workgroup.go:37 +0x7c
DanielRosenwasser

DanielRosenwasser commented on May 16, 2025

@DanielRosenwasser
MemberAuthor

Filed the second part at #871

DanielRosenwasser

DanielRosenwasser commented on May 16, 2025

@DanielRosenwasser
MemberAuthor

Can't repro but

  • the len(candidate) >= p.StarIndex check in Matches is probably supposed to be a strict >
  • In binder.go, we probably should not actually track the pattern unless it's valid. Not sure why it was written this way.
pinned this issue on May 16, 2025
ahejlsberg

ahejlsberg commented on May 16, 2025

@ahejlsberg
Member

Oddly, the crash doesn't happen if I run with --noEmit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Participants

    @DanielRosenwasser@andrewbranch@ahejlsberg

    Issue actions

      Runtime error compiling expo · Issue #870 · microsoft/typescript-go