Skip to content

Crash with protected constructor and generic intermediate class #1294

Open
@zsilbi

Description

@zsilbi

Error:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x100 pc=0x7917cb]

goroutine 85 [running]:
github.com/microsoft/typescript-go/internal/checker.(*Checker).getBaseTypes(0xc001035908, 0xc000f8a9a0)
        github.com/microsoft/typescript-go/internal/checker/checker.go:18245 +0x2b
github.com/microsoft/typescript-go/internal/checker.(*Checker).typeHasProtectedAccessibleBase(0xc001035908, 0xc00019e8c0, 0xc0001da05f?)
        github.com/microsoft/typescript-go/internal/checker/checker.go:8363 +0x25
github.com/microsoft/typescript-go/internal/checker.(*Checker).typeHasProtectedAccessibleBase(0xc001035908, 0xc00019e8c0, 0xc000f1b8e8?)
        github.com/microsoft/typescript-go/internal/checker/checker.go:8389 +0xc5
github.com/microsoft/typescript-go/internal/checker.(*Checker).isConstructorAccessible(0xc001035908, 0xc000150af0, 0x1?)
        github.com/microsoft/typescript-go/internal/checker/checker.go:8347 +0x225
github.com/microsoft/typescript-go/internal/checker.(*Checker).resolveNewExpression(0xc001035908, 0xc000150af0, 0x0, 0x0)
        github.com/microsoft/typescript-go/internal/checker/checker.go:8287 +0x145
github.com/microsoft/typescript-go/internal/checker.(*Checker).resolveSignature(0xc001035f18?, 0xd10b60?, 0xc000150af0?, 0x7fbe4e?)
        github.com/microsoft/typescript-go/internal/checker/checker.go:8143 +0x3a
github.com/microsoft/typescript-go/internal/checker.(*Checker).getResolvedSignature(0xc001035908, 0xc000150af0, 0x0, 0x0)
        github.com/microsoft/typescript-go/internal/checker/checker.go:8113 +0xd8
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkCallExpression(0xc001035908, 0xc000150af0, 0x0)
        github.com/microsoft/typescript-go/internal/checker/checker.go:8008 +0x4f
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkExpressionWorker(0xc001035908, 0x7f5890?, 0x1035908?)
        github.com/microsoft/typescript-go/internal/checker/checker.go:7392 +0x325
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkExpressionEx(0xc001035908, 0xc000150af0, 0x0)
        github.com/microsoft/typescript-go/internal/checker/checker.go:7178 +0x52
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkExpression(...)
        github.com/microsoft/typescript-go/internal/checker/checker.go:7171
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkExpressionStatement(0xc001035908, 0xc000173900)
        github.com/microsoft/typescript-go/internal/checker/checker.go:6951 +0x46
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElementWorker(0xc001035908, 0xc000173900)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2231 +0x29e
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElement(0xc001035908, 0x0?)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2157 +0x4e
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElements(0xc001035908, {0xc0001349c8, 0x1, 0x598da7?})
        github.com/microsoft/typescript-go/internal/checker/checker.go:2148 +0x2d
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkBlock(0xc001035908, 0xc0001dc060)
        github.com/microsoft/typescript-go/internal/checker/checker.go:3590 +0xfc
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElementWorker(0xc001035908, 0xc0001dc060)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2227 +0x365
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElement(0xc001035908, 0xc0004eb0e8?)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2157 +0x4e
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkFunctionOrMethodDeclaration(0xc001035908, 0xc0001252c0)
        github.com/microsoft/typescript-go/internal/checker/checker.go:3258 +0x131
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkMethodDeclaration(0xc001035908, 0xc0001252c0)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2623 +0x11b
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElementWorker(0xc001035908, 0xc0001252c0)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2183 +0xd9
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElement(0xc001035908, 0x46fc59?)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2157 +0x4e
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElements(0xc001035908, {0xc0001349d0, 0x1, 0xc001035908?})
        github.com/microsoft/typescript-go/internal/checker/checker.go:2148 +0x2d
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkClassDeclaration(0xc001035908, 0xc00019c360)
        github.com/microsoft/typescript-go/internal/checker/checker.go:4075 +0x133
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElementWorker(0xc001035908, 0xc00019c360)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2263 +0x347
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElement(0xc001035908, 0xc0016044b0?)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2157 +0x4e
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceElements(0xc001035908, {0xc0001349d8, 0x3, 0xc00002cb10?})
        github.com/microsoft/typescript-go/internal/checker/checker.go:2148 +0x2d
github.com/microsoft/typescript-go/internal/checker.(*Checker).checkSourceFile(0xc001035908, {0xd0b760, 0x126a380}, 0xc0001818c8)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2120 +0x11c
github.com/microsoft/typescript-go/internal/checker.(*Checker).CheckSourceFile(0xc001035908, {0xd0b760, 0x126a380}, 0xc0001818c8)
        github.com/microsoft/typescript-go/internal/checker/checker.go:2109 +0x5c
github.com/microsoft/typescript-go/internal/compiler.(*Program).CheckSourceFiles.func1-range1(0x1?)
        github.com/microsoft/typescript-go/internal/compiler/program.go:273 +0x3e
github.com/microsoft/typescript-go/internal/compiler.(*checkerPool).Files.func1(0xc001604480)
        github.com/microsoft/typescript-go/internal/compiler/checkerpool.go:82 +0x88
github.com/microsoft/typescript-go/internal/compiler.(*Program).CheckSourceFiles.func1()
        github.com/microsoft/typescript-go/internal/compiler/program.go:272 +0xdb
github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue.func1()
        github.com/microsoft/typescript-go/internal/core/workgroup.go:39 +0x50
created by github.com/microsoft/typescript-go/internal/core.(*parallelWorkGroup).Queue in goroutine 1
        github.com/microsoft/typescript-go/internal/core/workgroup.go:37 +0x85

Reproduction:

class C {
  protected constructor() {}
}

class B<T = any> extends C {}

class A extends B {
  f() {
    new A();
  }
}

Repository: https://github.com/zsilbi/tsgo-repro

Metadata

Metadata

Assignees

Labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions