Control-flow narrowing

The compiler refining a variable type along reachable paths after checks, assignments, and termination.