anchor.diff:    test_logicalAnd_leftFalse() async {
       await trackCode(r'''
   void f(int x) {
  -  false && /*unreachable*/ (x == 1);
  +  // TODO(paulberry): x shouldn't be considered both nullable and non-nullable.
  +  false && /*unreachable*/ (/*nonNullable,nullable*/x == 1);
   }
   ''');
     }
  
positive.code:   /*stmt: unreachable*/ do {} while (b);
    /*stmt: unreachable*/ for (;;) {}
    /*stmt: unreachable*/ for (var _ in []) {}
    /*stmt: unreachable*/ if (b) {}
    /*stmt: unreachable*/ switch (i) {}
    /*stmt: unreachable*/ try {} finally {}
    /*stmt: unreachable*/ while (b) {}
  }
  ''');
    }
  
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);
  