anchor.diff:      // TODO(rnystrom): Determine how this can ever be reached. If it can't,
       // remove it.
       if (t1.isVoid || t2.isVoid) {
  -      return false;
  +      return t1.isVoid && t2.isVoid;
       }
   
       // We've eliminated void, dynamic, bottom, and type parameters.  The only
  
positive.code: 
    bool _isSubtypeOf(DartType t1, DartType t2, Set<Element> visited,
        {bool dynamicIsBottom: false}) {
      // Guard recursive calls
      _GuardedSubtypeChecker<DartType> guardedSubtype = _guard(_isSubtypeOf);
      _GuardedSubtypeChecker<DartType> guardedInferTypeParameter =
          _guard(_inferTypeParameterSubtypeOf);
      if (t1 == t2) {
        return true;
      }
  
      // The types are void, dynamic, bottom, interface types, function types,
      // and type parameters. We proceed by eliminating these different classes
  
negative.code: 
      // S <: T where S is a type variable
      //  T is not dynamic or object (handled above)
      //  True if T == S
      //  Or true if bound of S is S' and S' <: T
      if (t1 is TypeParameterType) {
        if (t1 == t2) {
          return true;
        }
        if (guardedInferTypeParameter(t1, t2, visited)) {
          return true;
        }
  