anchor.diff:          // if null)
           _analyzeLeastUpperBoundTypes(
               node,
  -            _typeSystem.promoteToNonNull(
  -                _getExpressionType(node.leftHandSide, read: true)),
  -            _getExpressionType(node.rightHandSide, read: true));
  +            _typeSystem.promoteToNonNull(getReadType(node.leftHandSide)),
  +            getReadType(node.rightHandSide));
         } else {
           // The static type of a compound assignment using ??= before NNBD is the
           // least upper bound of the static types of the LHS and RHS.
  -        _analyzeLeastUpperBound(node, node.leftHandSide, node.rightHandSide,
  -            read: true);
  +        _analyzeLeastUpperBound(node, node.leftHandSide, node.rightHandSide);
         }
       } else if (operator == TokenType.AMPERSAND_AMPERSAND_EQ ||
           operator == TokenType.BAR_BAR_EQ) {
  
positive.code:     }
      return false;
    }
  }
  
  class AssignmentExpressionShared {
  
negative.code:     } else {
        var rightType = node.rightHandSide.staticType;
  
        var leftReadType = getReadType(node.leftHandSide);
        if (identical(leftReadType, NeverTypeImpl.instance)) {
          _inferenceHelper.recordStaticType(node, rightType);
          return;
  