Skip to content

Stackoverflow when compiling a specific getter method #48248

Description

Stackoverflow when compiling a specific getter method

🔎 Search Terms

  • Maximum call stack size exceeded
  • Stackoverflow

🕗 Version & Regression Information

The crash started happening with 4.6, and it still occurs on the latest nightly.
The crash doesn't happen on 4.5.5.

⏯ Playground Link

Reproduction playground: https://www.typescriptlang.org/dev/bug-workbench/?#code/MYGwhgzhAECyCeAVAFgSwHYHNoG8BQ00mApgC7QC28ACgE4D2ADgBQCUu0tZArretKTQwAZMOgAiAGb164gNzQAvnkVA

💻 Code

class MyThing {
  get myProp() { return this && "foo"; }
}

The crash only happens when strictNullChecks is enabled.

🙁 Actual behavior

Crash.

🙂 Expected behavior

No crash.

Activity

  1. RyanCavanaugh commented on Mar 14, 2022

    @RyanCavanaugh
    Member

    Bisected to #45350, which seems odd

  2. DanielRosenwasser commented on Mar 16, 2022

    @DanielRosenwasser
    Member

    For context/searchability, here's the call stack:

    <semantic> Response received: quickinfo (32). Request took 37 ms. Success: false . Message: Error processing request. Maximum call stack size exceeded
    RangeError: Maximum call stack size exceeded
        at hasSyntacticModifier ([node_modules_path]\typescript\lib\tsserver.js:18647:34)
        at hasStaticModifier ([node_modules_path]\typescript\lib\tsserver.js:18657:16)
        at Object.isStatic ([node_modules_path]\typescript\lib\tsserver.js:18653:43)
        at tryGetThisTypeAt ([node_modules_path]\typescript\lib\tsserver.js:71106:31)
        at checkThisExpression ([node_modules_path]\typescript\lib\tsserver.js:71059:24)
        at checkExpressionWorker ([node_modules_path]\typescript\lib\tsserver.js:78937:28)
        at checkExpression ([node_modules_path]\typescript\lib\tsserver.js:78882:38)
        at maybeCheckExpression ([node_modules_path]\typescript\lib\tsserver.js:78005:38)
        at BinaryExpressionStateMachine.onLeft ([node_modules_path]\typescript\lib\tsserver.js:77955:28)
        at Array.left ([node_modules_path]\typescript\lib\tsserver.js:29962:36)
        at trampoline ([node_modules_path]\typescript\lib\tsserver.js:30095:52)
        at [node_modules_path]\typescript\lib\tsserver.js:77920:30
        at checkExpressionWorker ([node_modules_path]\typescript\lib\tsserver.js:79010:28)
        at checkExpression ([node_modules_path]\typescript\lib\tsserver.js:78882:38)
        at checkExpressionCached ([node_modules_path]\typescript\lib\tsserver.js:78546:38)
        at [node_modules_path]\typescript\lib\tsserver.js:77098:32
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15409:28)
        at visitNodes ([node_modules_path]\typescript\lib\tsserver.js:30155:30)
        at Object.forEachChild ([node_modules_path]\typescript\lib\tsserver.js:30431:24)
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15425:31)
        at Object.forEachReturnStatement ([node_modules_path]\typescript\lib\tsserver.js:15405:16)
        at checkAndAggregateReturnExpressionTypes ([node_modules_path]\typescript\lib\tsserver.js:77095:16)
        at getReturnTypeFromBody ([node_modules_path]\typescript\lib\tsserver.js:76902:29)
        at resolveTypeOfAccessors ([node_modules_path]\typescript\lib\tsserver.js:55884:42)
        at getTypeOfAccessorsWorker ([node_modules_path]\typescript\lib\tsserver.js:55844:24)
        at getTypeOfSetAccessor ([node_modules_path]\typescript\lib\tsserver.js:55837:58)
        at getSetAccessorTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56062:28)
        at getWriteTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56058:20)
        at createUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58447:33)
        at getUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58499:28)
        at getPropertyOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:58508:28)
        at getPropertiesOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:57930:48)
        at getReducedType ([node_modules_path]\typescript\lib\tsserver.js:58525:34)
        at getNormalizedType ([node_modules_path]\typescript\lib\tsserver.js:63777:74)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64128:30)
        at structuredTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64791:42)
        at recursiveTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64688:30)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64200:25)
        at checkTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63815:26)
        at isTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63766:24)
        at isTypeAssignableTo ([node_modules_path]\typescript\lib\tsserver.js:62973:20)
        at isTypeAssignableToKind ([node_modules_path]\typescript\lib\tsserver.js:77605:53)
        at allTypesAssignableToKind ([node_modules_path]\typescript\lib\tsserver.js:77616:17)
        at getPromisedTypeOfPromise ([node_modules_path]\typescript\lib\tsserver.js:80261:17)
        at getAwaitedTypeOfPromise ([node_modules_path]\typescript\lib\tsserver.js:80232:32)
        at helper ([node_modules_path]\typescript\lib\tsserver.js:81671:35)
        at checkTestingKnownTruthyCallableOrAwaitableType ([node_modules_path]\typescript\lib\tsserver.js:81651:13)
        at BinaryExpressionStateMachine.onOperator ([node_modules_path]\typescript\lib\tsserver.js:77968:29)
        at Array.operator ([node_modules_path]\typescript\lib\tsserver.js:29980:21)
        at trampoline ([node_modules_path]\typescript\lib\tsserver.js:30095:52)
        at [node_modules_path]\typescript\lib\tsserver.js:77920:30
        at checkExpressionWorker ([node_modules_path]\typescript\lib\tsserver.js:79010:28)
        at checkExpression ([node_modules_path]\typescript\lib\tsserver.js:78882:38)
        at checkExpressionCached ([node_modules_path]\typescript\lib\tsserver.js:78546:38)
        at [node_modules_path]\typescript\lib\tsserver.js:77098:32
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15409:28)
        at visitNodes ([node_modules_path]\typescript\lib\tsserver.js:30155:30)
        at Object.forEachChild ([node_modules_path]\typescript\lib\tsserver.js:30431:24)
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15425:31)
        at Object.forEachReturnStatement ([node_modules_path]\typescript\lib\tsserver.js:15405:16)
        at checkAndAggregateReturnExpressionTypes ([node_modules_path]\typescript\lib\tsserver.js:77095:16)
        at getReturnTypeFromBody ([node_modules_path]\typescript\lib\tsserver.js:76902:29)
        at resolveTypeOfAccessors ([node_modules_path]\typescript\lib\tsserver.js:55884:42)
        at getTypeOfAccessorsWorker ([node_modules_path]\typescript\lib\tsserver.js:55844:24)
        at getTypeOfSetAccessor ([node_modules_path]\typescript\lib\tsserver.js:55837:58)
        at getSetAccessorTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56062:28)
        at getWriteTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56058:20)
        at createUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58447:33)
        at getUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58499:28)
        at getPropertyOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:58508:28)
        at getPropertiesOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:57930:48)
        at getReducedType ([node_modules_path]\typescript\lib\tsserver.js:58525:34)
        at getNormalizedType ([node_modules_path]\typescript\lib\tsserver.js:63777:74)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64128:30)
        at structuredTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64791:42)
        at recursiveTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64688:30)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64200:25)
        at checkTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63815:26)
        at isTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63766:24)
        at isTypeAssignableTo ([node_modules_path]\typescript\lib\tsserver.js:62973:20)
        at isTypeAssignableToKind ([node_modules_path]\typescript\lib\tsserver.js:77605:53)
        at allTypesAssignableToKind ([node_modules_path]\typescript\lib\tsserver.js:77616:17)
        at getPromisedTypeOfPromise ([node_modules_path]\typescript\lib\tsserver.js:80261:17)
        at getAwaitedTypeOfPromise ([node_modules_path]\typescript\lib\tsserver.js:80232:32)
        at helper ([node_modules_path]\typescript\lib\tsserver.js:81671:35)
        at checkTestingKnownTruthyCallableOrAwaitableType ([node_modules_path]\typescript\lib\tsserver.js:81651:13)
        at BinaryExpressionStateMachine.onOperator ([node_modules_path]\typescript\lib\tsserver.js:77968:29)
        at Array.operator ([node_modules_path]\typescript\lib\tsserver.js:29980:21)
        at trampoline ([node_modules_path]\typescript\lib\tsserver.js:30095:52)
        at [node_modules_path]\typescript\lib\tsserver.js:77920:30
        at checkExpressionWorker ([node_modules_path]\typescript\lib\tsserver.js:79010:28)
        at checkExpression ([node_modules_path]\typescript\lib\tsserver.js:78882:38)
        at checkExpressionCached ([node_modules_path]\typescript\lib\tsserver.js:78546:38)
        at [node_modules_path]\typescript\lib\tsserver.js:77098:32
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15409:28)
        at visitNodes ([node_modules_path]\typescript\lib\tsserver.js:30155:30)
        at Object.forEachChild ([node_modules_path]\typescript\lib\tsserver.js:30431:24)
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15425:31)
        at Object.forEachReturnStatement ([node_modules_path]\typescript\lib\tsserver.js:15405:16)
        at checkAndAggregateReturnExpressionTypes ([node_modules_path]\typescript\lib\tsserver.js:77095:16)
    
  3. RyanCavanaugh commented on Mar 17, 2022

    @RyanCavanaugh
    Member

    when there's a trampoline frame in your overflow stack... 😔

  4. DanielRosenwasser commented on Mar 17, 2022

    @DanielRosenwasser
    Member

    Aww ):

    Here's one to make you feel better (:

    class MyThing {
      get myProp() {
        return Promise[this];
      }
    }
    <semantic> Response received: encodedSemanticClassifications-full (781). Request took 131 ms. Success: false . Message: Error processing request. Maximum call stack size exceeded
    RangeError: Maximum call stack size exceeded
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64162:21)
        at typeRelatedToSomeType ([node_modules_path]\typescript\lib\tsserver.js:64460:35)
        at unionOrIntersectionRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64406:28)
        at structuredTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64771:34)
        at recursiveTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64688:30)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64200:25)
        at checkTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63815:26)
        at isTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63766:24)
        at isTypeAssignableTo ([node_modules_path]\typescript\lib\tsserver.js:62973:20)
        at checkIndexedAccessIndexType ([node_modules_path]\typescript\lib\tsserver.js:79768:17)
        at checkElementAccessExpression ([node_modules_path]\typescript\lib\tsserver.js:74312:20)
        at checkIndexedAccess ([node_modules_path]\typescript\lib\tsserver.js:74289:17)
        at checkExpressionWorker ([node_modules_path]\typescript\lib\tsserver.js:78971:28)
        at checkExpression ([node_modules_path]\typescript\lib\tsserver.js:78882:38)
        at checkExpressionCached ([node_modules_path]\typescript\lib\tsserver.js:78546:38)
        at [node_modules_path]\typescript\lib\tsserver.js:77098:32
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15409:28)
        at visitNodes ([node_modules_path]\typescript\lib\tsserver.js:30155:30)
        at Object.forEachChild ([node_modules_path]\typescript\lib\tsserver.js:30431:24)
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15425:31)
        at Object.forEachReturnStatement ([node_modules_path]\typescript\lib\tsserver.js:15405:16)
        at checkAndAggregateReturnExpressionTypes ([node_modules_path]\typescript\lib\tsserver.js:77095:16)
        at getReturnTypeFromBody ([node_modules_path]\typescript\lib\tsserver.js:76902:29)
        at resolveTypeOfAccessors ([node_modules_path]\typescript\lib\tsserver.js:55884:42)
        at getTypeOfAccessorsWorker ([node_modules_path]\typescript\lib\tsserver.js:55844:24)
        at getTypeOfSetAccessor ([node_modules_path]\typescript\lib\tsserver.js:55837:58)
        at getSetAccessorTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56062:28)
        at getWriteTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56058:20)
        at createUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58447:33)
        at getUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58499:28)
        at getPropertyOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:58508:28)
        at getPropertiesOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:57930:48)
        at getReducedType ([node_modules_path]\typescript\lib\tsserver.js:58525:34)
        at getNormalizedType ([node_modules_path]\typescript\lib\tsserver.js:63777:74)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64128:30)
        at structuredTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64791:42)
        at recursiveTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64688:30)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64200:25)
        at checkTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63815:26)
        at isTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63766:24)
        at isTypeAssignableTo ([node_modules_path]\typescript\lib\tsserver.js:62973:20)
        at checkIndexedAccessIndexType ([node_modules_path]\typescript\lib\tsserver.js:79768:17)
        at checkElementAccessExpression ([node_modules_path]\typescript\lib\tsserver.js:74312:20)
        at checkIndexedAccess ([node_modules_path]\typescript\lib\tsserver.js:74289:17)
        at checkExpressionWorker ([node_modules_path]\typescript\lib\tsserver.js:78971:28)
        at checkExpression ([node_modules_path]\typescript\lib\tsserver.js:78882:38)
        at checkExpressionCached ([node_modules_path]\typescript\lib\tsserver.js:78546:38)
        at [node_modules_path]\typescript\lib\tsserver.js:77098:32
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15409:28)
        at visitNodes ([node_modules_path]\typescript\lib\tsserver.js:30155:30)
        at Object.forEachChild ([node_modules_path]\typescript\lib\tsserver.js:30431:24)
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15425:31)
        at Object.forEachReturnStatement ([node_modules_path]\typescript\lib\tsserver.js:15405:16)
        at checkAndAggregateReturnExpressionTypes ([node_modules_path]\typescript\lib\tsserver.js:77095:16)
        at getReturnTypeFromBody ([node_modules_path]\typescript\lib\tsserver.js:76902:29)
        at resolveTypeOfAccessors ([node_modules_path]\typescript\lib\tsserver.js:55884:42)
        at getTypeOfAccessorsWorker ([node_modules_path]\typescript\lib\tsserver.js:55844:24)
        at getTypeOfSetAccessor ([node_modules_path]\typescript\lib\tsserver.js:55837:58)
        at getSetAccessorTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56062:28)
        at getWriteTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56058:20)
        at createUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58447:33)
        at getUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58499:28)
        at getPropertyOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:58508:28)
        at getPropertiesOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:57930:48)
        at getReducedType ([node_modules_path]\typescript\lib\tsserver.js:58525:34)
        at getNormalizedType ([node_modules_path]\typescript\lib\tsserver.js:63777:74)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64128:30)
        at structuredTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64791:42)
        at recursiveTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64688:30)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64200:25)
        at checkTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63815:26)
        at isTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:63766:24)
        at isTypeAssignableTo ([node_modules_path]\typescript\lib\tsserver.js:62973:20)
        at checkIndexedAccessIndexType ([node_modules_path]\typescript\lib\tsserver.js:79768:17)
        at checkElementAccessExpression ([node_modules_path]\typescript\lib\tsserver.js:74312:20)
        at checkIndexedAccess ([node_modules_path]\typescript\lib\tsserver.js:74289:17)
        at checkExpressionWorker ([node_modules_path]\typescript\lib\tsserver.js:78971:28)
        at checkExpression ([node_modules_path]\typescript\lib\tsserver.js:78882:38)
        at checkExpressionCached ([node_modules_path]\typescript\lib\tsserver.js:78546:38)
        at [node_modules_path]\typescript\lib\tsserver.js:77098:32
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15409:28)
        at visitNodes ([node_modules_path]\typescript\lib\tsserver.js:30155:30)
        at Object.forEachChild ([node_modules_path]\typescript\lib\tsserver.js:30431:24)
        at traverse ([node_modules_path]\typescript\lib\tsserver.js:15425:31)
        at Object.forEachReturnStatement ([node_modules_path]\typescript\lib\tsserver.js:15405:16)
        at checkAndAggregateReturnExpressionTypes ([node_modules_path]\typescript\lib\tsserver.js:77095:16)
        at getReturnTypeFromBody ([node_modules_path]\typescript\lib\tsserver.js:76902:29)
        at resolveTypeOfAccessors ([node_modules_path]\typescript\lib\tsserver.js:55884:42)
        at getTypeOfAccessorsWorker ([node_modules_path]\typescript\lib\tsserver.js:55844:24)
        at getTypeOfSetAccessor ([node_modules_path]\typescript\lib\tsserver.js:55837:58)
        at getSetAccessorTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56062:28)
        at getWriteTypeOfSymbol ([node_modules_path]\typescript\lib\tsserver.js:56058:20)
        at createUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58447:33)
        at getUnionOrIntersectionProperty ([node_modules_path]\typescript\lib\tsserver.js:58499:28)
        at getPropertyOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:58508:28)
        at getPropertiesOfUnionOrIntersectionType ([node_modules_path]\typescript\lib\tsserver.js:57930:48)
        at getReducedType ([node_modules_path]\typescript\lib\tsserver.js:58525:34)
        at getNormalizedType ([node_modules_path]\typescript\lib\tsserver.js:63777:74)
        at isRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64128:30)
        at structuredTypeRelatedTo ([node_modules_path]\typescript\lib\tsserver.js:64791:42)
    
  5. gabritto commented on Mar 30, 2022

    @gabritto
    Member

    Good news: it appears this bug has been fixed by #48459. This means it should be fixed in the current nightly, and from TS 4.7 onwards. Erik Krogh Kristensen (@erik-krogh) if you find the issue is still happening in those versions, please let us know and we can re-open the issue.

  6. locked as resolved and limited conversation to collaborators on Oct 22, 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 TypeScript

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions