Skip to content

The detection to unreachable code is inconsistent Β #55329

Closed
@FlandreDaisuki

Description

@FlandreDaisuki

πŸ”Ž Search Terms

unreachable, reachability

πŸ•— Version & Regression Information

⏯ Playground Link

https://www.typescriptlang.org/play?ts=5.1.6#code/MYewdgzgLgBFAWAnEB3AWgU2TAvDAFAJS4B8MA3nEqjAAwwC+A3AFAsBmArmMFAJbgY7WkQosYEqsnRYQRVpJihIIADYYAdKpABzfAHIMADwAOGXjG6IMAQ2DwbAI3X7CrBmy49+g9gEZ8SgRpegYALgopVFoIqABPMxB2KJlsBmJycUlg6PksiWUINU1tPUNTc1grW3snFzcWDxYAE3NVG2shbl4BMBSAeTAMUQihgDcsVg5unz6delFMxRyUQeGGxULirV0DarsHZwwYGwgYYzNeDGbXd08Z3pgdPwIg6hQX8IoVv1iEjCSAyG6TEy3eAQ2ki26h2ZQulUsYGsBzqGFujTYhVgKwAKigQBFRDgyOMsLgCMRiZEVjAAEyMKZeHqCeALDL5FJ4uSQgrgIow0p7JE1Q7qE5neFXG4NJpM2YweAvQIpelfcgrWl-RLJXH4kFLbLvWl5TZ87aC8qXKrClFHdEMIA

πŸ’» Code

const throwZero = () => { throw 0 };

function f0() {
    throwZero();
    console.log('expect unreachable');
}

function f1({ throw0 }: { throw0: typeof throwZero }) {
    throw0();
    console.log('expect unreachable');
}
declare function throwOne() : never;

function g0 () {
    throwOne();
    console.log('unreachable as expected');
}

function g1 ({ throw1 }: {throw1: typeof throwOne}) {
    throw1();
    console.log('expect unreachable');
}

πŸ™ Actual behavior

In first code block:

The two console.log() are not identified as unreachable code.

In second code block:

It works at g0 declaration but not g1.

πŸ™‚ Expected behavior

They should be unreachable code.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions