anchor.diff:    /*stmt: unreachable*/ do {} while (b);
     /*stmt: unreachable*/ for (;;) {}
     /*stmt: unreachable*/ for (var _ in []) {}
  -  /*stmt: unreachable*/ if (b) {}
  -  /*stmt: unreachable*/ switch (i) {}
  +  // TODO(paulberry): b shouldn't be considered both nullable and non-nullable.
  +  /*stmt: unreachable*/ if (/*nonNullable,nullable*/b) {}
  +  // TODO(paulberry): i shouldn't be considered both nullable and non-nullable.
  +  /*stmt: unreachable*/ switch (/*nonNullable,nullable*/i) {}
     /*stmt: unreachable*/ try {} finally {}
  -  /*stmt: unreachable*/ while (b) {}
  +  // TODO(paulberry): b shouldn't be considered both nullable and non-nullable.
  +  /*stmt: unreachable*/ while (/*nonNullable,nullable*/b) {}
   }
   ''');
     }
  
positive.code:   test_logicalAnd_leftFalse() async {
      await trackCode(r'''
  void f(int x) {
    false && /*unreachable*/ (x == 1);
  }
  ''');
    }
  
negative.code:   Set<_FlowAssertion> computeNodeValue(Id id, AstNode node) {
      Set<_FlowAssertion> result = {};
      if (_flowResult.nullableNodes.contains(node)) {
        result.add(_FlowAssertion.nullable);
      }
      if (_flowResult.nonNullableNodes.contains(node)) {
        result.add(_FlowAssertion.nonNullable);
      }
      if (_flowResult.unreachableNodes.contains(node)) {
        result.add(_FlowAssertion.unreachable);
  