code: void expectValidAsyncReturnType(Node n, JSType type) {
      if (promiseOfUnknownType.isSubtypeOf(type)) {
        return;
      }
  
      JSError err = JSError.make(n, INVALID_ASYNC_RETURN_TYPE, type.toString());
      registerMismatch(type, promiseOfUnknownType, err);
      report(err);
    }
docs: Expect the type to be a supertype of `Promise`.
  
  <p>`Promise` is the <em>lower</em> bound of the declared return type, since that's what async
  functions always return; the user can't return an instance of a more specific type.