Skip to content

Data race in RequiresAddingImplicitUndefined #1151

@jakebailey

Description

@jakebailey

CI's smoke test in race mode (https://github.com/microsoft/typescript-go/actions/runs/15566037970/job/43830253823) detected this race:

==================
WARNING: DATA RACE
Write at 0x00c00c7316b0 by goroutine 533:
  runtime.mapassign_fast64ptr()
      /opt/hostedtoolcache/go/1.24.4/x64/src/internal/runtime/maps/runtime_fast64_swiss.go:367 +0x0
  github.com/microsoft/typescript-go/internal/core.(*LinkStore[go.shape.*github.com/microsoft/typescript-go/internal/ast.Node,go.shape.struct { github.com/microsoft/typescript-go/internal/checker.resolvedSignature *github.com/microsoft/typescript-go/internal/checker.Signature; github.com/microsoft/typescript-go/internal/checker.effectsSignature *github.com/microsoft/typescript-go/internal/checker.Signature; github.com/microsoft/typescript-go/internal/checker.decoratorSignature *github.com/microsoft/typescript-go/internal/checker.Signature }]).Get()
      /home/runner/work/typescript-go/typescript-go/internal/core/linkstore.go:1[9](https://github.com/microsoft/typescript-go/actions/runs/15566037970/job/43830253823#step:11:10) +0x15b
  github.com/microsoft/typescript-go/internal/checker.(*Checker).getSignatureFromDeclaration()
      /home/runner/work/typescript-go/typescript-go/internal/checker/checker.go:18771 +0x5d
  github.com/microsoft/typescript-go/internal/checker.(*Checker).getSignaturesOfSymbol()
      /home/runner/work/typescript-go/typescript-go/internal/checker/checker.go:18765 +0x3b6
  github.com/microsoft/typescript-go/internal/checker.(*emitResolver).IsImplementationOfOverload()
      /home/runner/work/typescript-go/typescript-go/internal/checker/emitresolver.go:420 +0x29c
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).transformTopLevelDeclaration()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:[10](https://github.com/microsoft/typescript-go/actions/runs/15566037970/job/43830253823#step:11:11)71 +0x465
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visitDeclarationStatements()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:940 +0x84
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:[11](https://github.com/microsoft/typescript-go/actions/runs/15566037970/job/43830253823#step:11:12)8 +0x130
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit-fm()
      <autogenerated>:1 +0x3d
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitSlice()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:148 +0x133
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitNodes()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:99 +0x84
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).transformModuleDeclaration()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:1179 +0x44c
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).transformTopLevelDeclaration()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:1096 +0x864
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visitDeclarationStatements()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:940 +0x84
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:118 +0x130
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit-fm()
      <autogenerated>:1 +0x3d
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitSlice()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:148 +0x133
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitNodes()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:99 +0x84
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).transformSourceFile()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:185 +0x8f
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visitSourceFile()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:172 +0x35c
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:102 +0xfa
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit-fm()
      <autogenerated>:1 +0x3d
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitNode()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:51 +0x81
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitSourceFile()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:36 +0x691
  github.com/microsoft/typescript-go/internal/transformers.(*Transformer).TransformSourceFile()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/transformer.go:42 +0x66e
  github.com/microsoft/typescript-go/internal/compiler.(*emitter).emitDeclarationFile()
      /home/runner/work/typescript-go/typescript-go/internal/compiler/emitter.go:108 +0x66c
  github.com/microsoft/typescript-go/internal/compiler.(*emitter).emit()
      /home/runner/work/typescript-go/typescript-go/internal/compiler/emitter.go:43 +0x1cc
  github.com/microsoft/typescript-go/internal/compiler.(*Program).Emit.func2()
      /home/runner/work/typescript-go/typescript-go/internal/compiler/program.go:848 +0x1e4
  github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue.func1()
      /home/runner/work/typescript-go/typescript-go/internal/core/workgroup.go:39 +0x8d

Previous read at 0x00c00c7316b0 by goroutine 481:
  runtime.mapaccess1_fast64()
      /opt/hostedtoolcache/go/1.24.4/x64/src/internal/runtime/maps/runtime_fast64_swiss.go:17 +0x0
  github.com/microsoft/typescript-go/internal/core.(*LinkStore[go.shape.*github.com/microsoft/typescript-go/internal/ast.Node,go.shape.struct { github.com/microsoft/typescript-go/internal/checker.resolvedSignature *github.com/microsoft/typescript-go/internal/checker.Signature; github.com/microsoft/typescript-go/internal/checker.effectsSignature *github.com/microsoft/typescript-go/internal/checker.Signature; github.com/microsoft/typescript-go/internal/checker.decoratorSignature *github.com/microsoft/typescript-go/internal/checker.Signature }]).Get()
      /home/runner/work/typescript-go/typescript-go/internal/core/linkstore.go:11 +0x7b
  github.com/microsoft/typescript-go/internal/checker.(*Checker).getSignatureFromDeclaration()
      /home/runner/work/typescript-go/typescript-go/internal/checker/checker.go:18771 +0x5d
  github.com/microsoft/typescript-go/internal/checker.(*emitResolver).isOptionalParameter()
      /home/runner/work/typescript-go/typescript-go/internal/checker/emitresolver.go:542 +0x1aa
  github.com/microsoft/typescript-go/internal/checker.(*emitResolver).isOptionalUninitializedParameterProperty()
      /home/runner/work/typescript-go/typescript-go/internal/checker/emitresolver.go:515 +0x6c
  github.com/microsoft/typescript-go/internal/checker.(*emitResolver).requiresAddingImplicitUndefined()
      /home/runner/work/typescript-go/typescript-go/internal/checker/emitresolver.go:497 +0x4d
  github.com/microsoft/typescript-go/internal/checker.(*emitResolver).RequiresAddingImplicitUndefined()
      /home/runner/work/typescript-go/typescript-go/internal/checker/emitresolver.go:490 +0xbb
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).ensureType()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:1001 +0x1db
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).ensureParameter()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:1539 +0x26e
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).updateParamList()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:1515 +0x2e4
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).transformFunctionDeclaration()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:1144 +0xfd
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).transformTopLevelDeclaration()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:1094 +0x6c4
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visitDeclarationStatements()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:940 +0x84
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:118 +0x130
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit-fm()
      <autogenerated>:1 +0x3d
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitSlice()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:148 +0x133
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitNodes()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:99 +0x84
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).transformSourceFile()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:185 +0x8f
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visitSourceFile()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:172 +0x35c
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/declarations/transform.go:102 +0xfa
  github.com/microsoft/typescript-go/internal/transformers/declarations.(*DeclarationTransformer).visit-fm()
      <autogenerated>:1 +0x3d
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitNode()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:51 +0x81
  github.com/microsoft/typescript-go/internal/ast.(*NodeVisitor).VisitSourceFile()
      /home/runner/work/typescript-go/typescript-go/internal/ast/visitor.go:36 +0x691
  github.com/microsoft/typescript-go/internal/transformers.(*Transformer).TransformSourceFile()
      /home/runner/work/typescript-go/typescript-go/internal/transformers/transformer.go:42 +0x66e
  github.com/microsoft/typescript-go/internal/compiler.(*emitter).emitDeclarationFile()
      /home/runner/work/typescript-go/typescript-go/internal/compiler/emitter.go:108 +0x66c
  github.com/microsoft/typescript-go/internal/compiler.(*emitter).emit()
      /home/runner/work/typescript-go/typescript-go/internal/compiler/emitter.go:43 +0x1cc
  github.com/microsoft/typescript-go/internal/compiler.(*Program).Emit.func2()
      /home/runner/work/typescript-go/typescript-go/internal/compiler/program.go:848 +0x1e4
  github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue.func1()
      /home/runner/work/typescript-go/typescript-go/internal/core/workgroup.go:39 +0x8d

Goroutine 533 (running) created at:
  github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue()
      /home/runner/work/typescript-go/typescript-go/internal/core/workgroup.go:37 +0xf0
  github.com/microsoft/typescript-go/internal/compiler.(*Program).Emit()
      /home/runner/work/typescript-go/typescript-go/internal/compiler/program.go:840 +0x35e
  github.com/microsoft/typescript-go/internal/execute.emitFilesAndReportErrors()
      /home/runner/work/typescript-go/typescript-go/internal/execute/tsc.go:269 +0x977
  github.com/microsoft/typescript-go/internal/execute.performCompilation()
      /home/runner/work/typescript-go/typescript-go/internal/execute/tsc.go:189 +0x25a
  github.com/microsoft/typescript-go/internal/execute.executeCommandLineWorker()
      /home/runner/work/typescript-go/typescript-go/internal/execute/tsc.go:137 +0x17[12](https://github.com/microsoft/typescript-go/actions/runs/15566037970/job/43830253823#step:11:13)
  github.com/microsoft/typescript-go/internal/execute.CommandLine()
      /home/runner/work/typescript-go/typescript-go/internal/execute/tsc.go:35 +0x2[13](https://github.com/microsoft/typescript-go/actions/runs/15566037970/job/43830253823#step:11:14)
  main.runMain()
      /home/runner/work/typescript-go/typescript-go/cmd/tsgo/main.go:23 +0x171
  main.main()
      /home/runner/work/typescript-go/typescript-go/cmd/tsgo/main.go:10 +0x1c

Goroutine 481 (running) created at:
  github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue()
      /home/runner/work/typescript-go/typescript-go/internal/core/workgroup.go:37 +0xf0
  github.com/microsoft/typescript-go/internal/compiler.(*Program).Emit()
      /home/runner/work/typescript-go/typescript-go/internal/compiler/program.go:840 +0x35e
  github.com/microsoft/typescript-go/internal/execute.emitFilesAndReportErrors()
      /home/runner/work/typescript-go/typescript-go/internal/execute/tsc.go:269 +0x977
  github.com/microsoft/typescript-go/internal/execute.performCompilation()
      /home/runner/work/typescript-go/typescript-go/internal/execute/tsc.go:189 +0x25a
  github.com/microsoft/typescript-go/internal/execute.executeCommandLineWorker()
      /home/runner/work/typescript-go/typescript-go/internal/execute/tsc.go:137 +0x[17](https://github.com/microsoft/typescript-go/actions/runs/15566037970/job/43830253823#step:11:18)12
  github.com/microsoft/typescript-go/internal/execute.CommandLine()
      /home/runner/work/typescript-go/typescript-go/internal/execute/tsc.go:35 +0x213
  main.runMain()
      /home/runner/work/typescript-go/typescript-go/cmd/tsgo/main.go:23 +0x171
  main.main()
      /home/runner/work/typescript-go/typescript-go/cmd/tsgo/main.go:10 +0x1c
==================
Found 1 data race(s)

RequiresAddingImplicitUndefined should be locking before the switch so r.requiresAddingImplicitUndefined is called under lock.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions