function exhaustion3(x): number {
  let foo = null;
  switch (x) {
  case 0: // falls through
  case 1:
    foo = 3;
    break;
  default:
    throw new Error('Invalid state');
  }
  return foo; // no error
}
TODO this shouldn't cause an error, because the path that
runs it will always go on to assign a number to foo. But
we'll need true isolation in env snapshots to model this.
Currently tvars are always shared between clones - we'd
have to rework envs pretty extensively to avoid it.

    foo = "";