Skip to content

VS tsserver crash in openExternalProjects: Error processing request. Debug Failure. False expression. #35630

Closed

Description

New in 3.7

This LS crash is the current top hitter in Visual Studio. I have not found a corresponding auto-filed bug, which implies it's not impacting VS Code.

Seen in Visual Studio versions: ["16.5.29521.150","16.5.29504.125","16.4.29519.181","16.4.29519.161","16.4.29411.138","16.3.29503.13","16.3.29519.87","16.3.29411.108","16.3.29326.143","16.3.29509.3"]

TypeScript version: ["3.7.2","3.7.1-rc","3.7.0-beta","3.7.3"]
Command: openExternalProjects

Message: Error processing request. Debug Failure. False expression.
Stack trace:

declareSymbol(tsserver.js:29174:22)
declareSourceFileMember(tsserver.js:30473:19)
declareSymbolAndAddToSymbolTable(tsserver.js:30420:28)
bindThisPropertyAssignment(tsserver.js:31334:25)
bindWorker(tsserver.js:30985:29)
bind(tsserver.js:30867:13)
visitNode(tsserver.js:17584:24)
Object.forEachChild(tsserver.js:17998:21)
bindEachChild(tsserver.js:29481:16)
bindChildrenWorker(tsserver.js:29576:21)
bindChildren(tsserver.js:29451:17)
bind(tsserver.js:30878:21)
bindEach(tsserver.js:29473:21)
visitNodes(tsserver.js:17589:24)
Object.forEachChild(tsserver.js:17978:21)
bindEachChild(tsserver.js:29481:16)
bindChildrenWorker(tsserver.js:29576:21)
bindChildren(tsserver.js:29451:17)
bind(tsserver.js:30878:21)
bindEach(tsserver.js:29473:21)
visitNodes(tsserver.js:17589:24)
Object.forEachChild(tsserver.js:17978:21)
bindEachChild(tsserver.js:29481:16)
bindChildrenWorker(tsserver.js:29576:21)
bindChildren(tsserver.js:29451:17)
bind(tsserver.js:30878:21)
bindEach(tsserver.js:29473:21)
visitNodes(tsserver.js:17589:24)
Object.forEachChild(tsserver.js:17978:21)
bindEachChild(tsserver.js:29481:16)
bindChildrenWorker(tsserver.js:29576:21)
bindChildren(tsserver.js:29451:17)
bind(tsserver.js:30878:21)
bindEach(tsserver.js:29473:21)
visitNodes(tsserver.js:17589:24)
Object.forEachChild(tsserver.js:17978:21)
bindEachChild(tsserver.js:29481:16)
bindChildrenWorker(tsserver.js:29576:21)
bindChildren(tsserver.js:29451:17)
bind(tsserver.js:30878:21)
bindExpressionStatement(tsserver.js:30068:13)
bindChildrenWorker(tsserver.js:29530:21)
bindChildren(tsserver.js:29451:17)
bind(tsserver.js:30878:21)
bindLabeledStatement(tsserver.js:30084:13)
bindChildrenWorker(tsserver.js:29533:21)
bindChildren(tsserver.js:29451:17)
bind(tsserver.js:30878:21)
unknown_function(tsserver.js:29457:94)
bindEach(tsserver.js:29473:21)
bindEachFunctionsFirst(tsserver.js:29457:13)
bindChildrenWorker(tsserver.js:29567:21)
bindChildren(tsserver.js:29451:17)
bindContainer(tsserver.js:29397:17)
bind(tsserver.js:30881:21)
bindSourceFile(tsserver.js:29030:17)
Object.bindSourceFile(tsserver.js:28967:9)
initializeTypeChecker(tsserver.js:64332:20)
Object.createTypeChecker(tsserver.js:33586:9)
Object.getTypeChecker(tsserver.js:95558:79)
synchronizeHostData(tsserver.js:130590:21)
Object.getProgram(tsserver.js:130672:13)
ExternalProject.Project.updateGraphWorker(tsserver.js:135023:53)
ExternalProject.Project.updateGraph(tsserver.js:134966:42)
ExternalProject.updateGraph(tsserver.js:135963:59)
ProjectService.openExternalProject(tsserver.js:138655:29)
ProjectService.openExternalProjects(tsserver.js:138406:26)
Session.handlers.ts.createMapFromTemplate._a.(tsserver.js:139167:46)
unknown_function(tsserver.js:140854:88)
IOSession.Session.executeWithRequestId(tsserver.js:140845:28)
IOSession.Session.executeCommand(tsserver.js:140854:33)
IOSession.Session.onMessage(tsserver.js:140877:35)
Interface.(tsserver.js:142192:27)
suppressed_frame()
suppressed_frame()
suppressed_frame()
suppressed_frame()
suppressed_frame()
suppressed_frame()
suppressed_frame()
suppressed_frame()
suppressed_frame()

ADO link: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1034740

Activity

  1. changed the title [-][Telemetry] servererror: Error processing request. Debug Failure. False expression.[/-] [+]VS tsserver crash in openExternalProjects: Error processing request. Debug Failure. False expression.[/+] on Dec 11, 2019
  2. RyanCavanaugh commented on Dec 11, 2019

    @RyanCavanaugh
    Member

    Made a repro from the call stack

    this["a" + "b"] = 0;
  3. minestarks commented on Dec 11, 2019

    @minestarks
    ContributorAuthor
  4. sandersn commented on Dec 11, 2019

    @sandersn
    Member

    New and exciting call stack for the code:

    this["a" + "b"] = 0
    module.exports.foo = function () { return 1 }

    The cause (and fix) is almost certainly the same, the module code path just gets further than the global path before crashing.

    TypeError: Cannot read property 'flags' of undefined
        at Object.getCheckFlags (/home/nathansa/ts/built/local/tsserver.js:16294:23)
        at getTypeOfSymbol (/home/nathansa/ts/built/local/tsserver.js:39757:20)
        at checkFunctionExpressionOrObjectLiteralMethod (/home/nathansa/ts/built/local/tsserver.js:56882:24)
        at checkExpressionWorker (/home/nathansa/ts/built/local/tsserver.js:58359:28)
        at checkExpression (/home/nathansa/ts/built/local/tsserver.js:58260:38)
        at checkBinaryLikeExpression (/home/nathansa/ts/built/local/tsserver.js:57521:29)
        at checkBinaryExpression (/home/nathansa/ts/built/local/tsserver.js:57496:20)
        at checkExpressionWorker (/home/nathansa/ts/built/local/tsserver.js:58380:28)
        at checkExpression (/home/nathansa/ts/built/local/tsserver.js:58260:38)
        at checkExpressionStatement (/home/nathansa/ts/built/local/tsserver.js:60635:13)
        at checkSourceElementWorker (/home/nathansa/ts/built/local/tsserver.js:63045:28)
        at checkSourceElement (/home/nathansa/ts/built/local/tsserver.js:62928:17)
        at Object.forEach (/home/nathansa/ts/built/local/tsserver.js:151:30)
        at checkSourceFileWorker (/home/nathansa/ts/built/local/tsserver.js:63249:20)
        at checkSourceFile (/home/nathansa/ts/built/local/tsserver.js:63218:13)
        at getDiagnosticsWorker (/home/nathansa/ts/built/local/tsserver.js:63296:17)
        at Object.getDiagnostics (/home/nathansa/ts/built/local/tsserver.js:63282:24)
        at /home/nathansa/ts/built/local/tsserver.js:95944:85
        at runWithCancellationToken (/home/nathansa/ts/built/local/tsserver.js:95909:24)
        at getSemanticDiagnosticsForFileNoCache (/home/nathansa/ts/built/local/tsserver.js:95932:20)
        at getAndCacheDiagnostics (/home/nathansa/ts/built/local/tsserver.js:96185:26)
        at getSemanticDiagnosticsForFile (/home/nathansa/ts/built/local/tsserver.js:95929:20)
        at getDiagnosticsHelper (/home/nathansa/ts/built/local/tsserver.js:95871:24)
        at Object.getSemanticDiagnostics (/home/nathansa/ts/built/local/tsserver.js:95884:20)
        at Object.getSemanticDiagnostics (/home/nathansa/ts/built/local/tsserver.js:131020:47)
        at /home/nathansa/ts/built/local/tsserver.js:140369:140
        at IOSession.Session.getDiagnosticsWorker (/home/nathansa/ts/built/local/tsserver.js:140239:35)
        at IOSession.Session.getSemanticDiagnosticsSync (/home/nathansa/ts/built/local/tsserver.js:140369:29)
        at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/home/nathansa/ts/built/local/tsserver.js:139744:61)
        at /home/nathansa/ts/built/local/tsserver.js:141239:88
        at IOSession.Session.executeWithRequestId (/home/nathansa/ts/built/local/tsserver.js:141230:28)
        at IOSession.Session.executeCommand (/home/nathansa/ts/built/local/tsserver.js:141239:33)
        at IOSession.Session.onMessage (/home/nathansa/ts/built/local/tsserver.js:141262:35)
        at Interface.<anonymous> (/home/nathansa/ts/built/local/tsserver.js:142577:27)
        at emitOne (events.js:116:13)
        at Interface.emit (events.js:211:7)
        at Interface._onLine (readline.js:282:10)
        at Interface._normalWrite (readline.js:424:12)
        at Socket.ondata (readline.js:141:10)
        at emitOne (events.js:116:13)
        at Socket.emit (events.js:211:7)
        at addChunk (_stream_readable.js:263:12)
        at readableAddChunk (_stream_readable.js:250:11)
        at Socket.Readable.push (_stream_readable.js:208:10)
        at Pipe.onread (net.js:607:20)
    
  5. sandersn commented on Dec 11, 2019

    @sandersn
    Member

    Mine Starks (@minestarks) the important parts -- bindThisPropertyAssignment and declareSymbolAndAddToSymbolTable -- are the same. It's a dupe.

  6. sandersn commented on Dec 11, 2019

    @sandersn
    Member

    We forget to handle dynamic names in the source file binding case. There's nothing sensible we can do, so dynamic names should in a top-level this-property assignment should be skipped.

  7. sandersn commented on Dec 11, 2019

    @sandersn
    Member

    Fix is ready.

  8. sandersn commented on Dec 12, 2019

    @sandersn
    Member

    This is now in 3.7 as well.

  9. minestarks commented on Dec 17, 2019

    @minestarks
    ContributorAuthor

    Nathan Shively-Sanders (@sandersn) what about this bug? Confirmed dupe or would you need more info? The callstack doesn't have declareSymbolAndAddToSymbolTable, but bindThisPropertyAssignment is there.

  10. sandersn commented on Dec 17, 2019

    @sandersn
    Member

    It's likely related but I need to look at the code in bindThisPropertyPropertyAssignment again.

  11. sandersn commented on Dec 17, 2019

    @sandersn
    Member

    Yes, it's extremely likely to be related:

    1. There are three calls to declareSymbol in bindThisPropertyAssignment; two are guarded by !hasDynamicName.
    2. The stack you give hits the same !hasDynamicName assert in declareSymbol.

    I'm looking at tsserver.js for 3.7.2 and 3.7.3, though, and the line numbers don't match up with the quoted line number in the bug; 31331 should be 1 of the 3 calls to declareSymbol, but isn't in either version. Any idea how to interpret line numbers in the stack of that bug?

  12. minestarks commented on Dec 18, 2019

    @minestarks
    ContributorAuthor

    Here's a callstack confirmed to be from 3.7.3. I think this lines up?

        "declareSymbol(tsserver.js:29196:22)",
        "bindThisPropertyAssignment(tsserver.js:31350:25)",
        "bindWorker(tsserver.js:31004:29)",
        "bind(tsserver.js:30886:13)",
        "bindExpressionStatement(tsserver.js:30090:13)",
        "bindChildrenWorker(tsserver.js:29552:21)",
        "bindChildren(tsserver.js:29473:17)",
        "bind(tsserver.js:30897:21)",
        "unknown_function(tsserver.js:29479:94)",
        "bindEach(tsserver.js:29495:21)",
        "bindEachFunctionsFirst(tsserver.js:29479:13)",
        "bindChildrenWorker(tsserver.js:29589:21)",
        "bindChildren(tsserver.js:29473:17)",
        "bindContainer(tsserver.js:29419:17)",
        "bind(tsserver.js:30900:21)",
        "bindSourceFile(tsserver.js:29052:17)",
        "Object.bindSourceFile(tsserver.js:28989:9)",
        "initializeTypeChecker(tsserver.js:64368:20)",
        "Object.createTypeChecker(tsserver.js:33606:9)",
        "Object.getTypeChecker(tsserver.js:95596:79)",
        "synchronizeHostData(tsserver.js:130629:21)",
        "Object.getProgram(tsserver.js:130711:13)",
        "ExternalProject.Project.updateGraphWorker(tsserver.js:135062:53)",
        "ExternalProject.Project.updateGraph(tsserver.js:135005:42)",
        "ExternalProject.updateGraph(tsserver.js:136017:59)",
        "ProjectService.openExternalProject(tsserver.js:138714:29)",
        "ProjectService.openExternalProjects(tsserver.js:138465:26)",
    
    
  13. sandersn commented on Dec 18, 2019

    @sandersn
    Member

    Nope :(
    My locations show more 16 lines -- I'm using the version published to NPM, which might be different from 3.7.3 in VS? That would be weird.

  14. minestarks commented on Dec 18, 2019

    @minestarks
    ContributorAuthor

    That would be weird, wouldn't it? I'm looking at this. It claims to correspond to the 3.7.3 tag. The VS side is built in a different pipeline so maybe the output is slightly different? Scary but possible in theory

  15. galkin commented on Dec 22, 2019

    @galkin

    Wesley Wigham (@weswigham),
    Only this issue has 3.7.4 milestone label, so I'm posting my question here.
    NPM has 3.7.4 version, but github have not tag/release. Could you fix this?

  16. weswigham commented on Dec 22, 2019

    @weswigham
    Member

    Daniel Rosenwasser (@DanielRosenwasser) you wanna proof the draft GitHub release?

  17. locked as resolved and limited conversation to collaborators on Oct 21, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugA bug in TypeScriptFix AvailableA PR has been opened for this issue

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions