anchor.diff:            unwrappedType = type.typeArguments[0];
           }
         }
  -    }
  -    _updateInferredReturnType(
  -        inferrer, type, unwrappedType, expression, fileOffset, false);
  -  }
  -
  -  void handleYield(TypeInferrerImpl inferrer, bool isYieldStar, DartType type,
  -      Expression expression, int fileOffset) {
  -    if (!isGenerator) return;
  -    var unwrappedType = type;
  -    if (isYieldStar) {
  +    } else if (isYieldStar) {
         unwrappedType = inferrer.getDerivedTypeArgumentOf(
                 type,
                 isAsync
  
positive.code:   void handleReturn(TypeInferrerImpl inferrer, DartType type,
        Expression expression, int fileOffset) {
      if (isGenerator) return;
      var unwrappedType = type;
      if (isAsync) {
        if (type is InterfaceType) {
          if (identical(type.classNode, inferrer.coreTypes.futureClass)) {
            unwrappedType = type.typeArguments[0];
  
negative.code:                   : inferrer.coreTypes.iterableClass) ??
            type;
      }
      if (_needToInferReturnType) {
        if (_inferredReturnType == null) {
          _inferredReturnType = unwrappedType;
        } else {
          _inferredReturnType = inferrer.typeSchemaEnvironment
              .getLeastUpperBound(_inferredReturnType, unwrappedType);
        }
      }
    }
  