anchor.diff:        throw StateError('No type computed for ${expression.runtimeType} '
             '(${expression.toSource()}) offset=${expression.offset}');
       }
  -    _checkAssignment(
  -        destinationType, sourceType, canInsertChecks ? expression : null);
  +    ExpressionChecks expressionChecks;
  +    if (canInsertChecks) {
  +      expressionChecks = ExpressionChecks(
  +          expression.end, sourceType.node, destinationType.node, _guards);
  +      _variables.recordExpressionChecks(_source, expression, expressionChecks);
  +    }
  +    _checkAssignment(destinationType, sourceType, expressionChecks,
  +        hard: _isVariableOrParameterReference(expression) &&
  +            !_inConditionalControlFlow);
       return sourceType;
     }
   
  
positive.code:   @override
    DecoratedType visitReturnStatement(ReturnStatement node) {
      if (node.expression == null) {
        _checkAssignment(_currentFunctionType.returnType, _nullType, null);
      } else {
        _handleAssignment(_currentFunctionType.returnType, node.expression);
      }
  
negative.code:           destinationType.typeArguments.length);
        for (int i = 0; i < sourceType.typeArguments.length; i++) {
          _checkAssignment(destinationType.typeArguments[i],
              sourceType.typeArguments[i], expressionChecks,
              hard: false);
        }
      } else if (destinationType.type.isDynamic || sourceType.type.isDynamic) {
        // ok; nothing further to do.
  