fun test1(a: Any?): Any {
  return CHECK_NOT_NULL<Any>(arg0 = a)
}

fun test2(a: Any?): Int {
  return CHECK_NOT_NULL<Int>(arg0 = { // BLOCK
    val tmp0_safe_receiver: Any? = a
    when {
      EQEQ(arg0 = tmp0_safe_receiver, arg1 = null) -> null
      else -> tmp0_safe_receiver.hashCode()
    }
  })
}

fun <X : Any?> test3(a: X): (X & Any) {
  return CHECK_NOT_NULL<(X & Any)>(arg0 = a)
}

fun useString(s: String) {
}

fun <X : Any?> test4(a: X) {
  when {
    a is String? -> CHECK_NOT_NULL<String>(arg0 = a /*as String? */) /*~> Unit */
  }
  when {
    a is String? -> useString(s = CHECK_NOT_NULL<String>(arg0 = a /*as String? */))
  }
}
