fun <T : Any?> elvisLike(x: T, y: (T & Any)): (T & Any) {
  return { // BLOCK
    val <elvis>: T = x
    when {
      EQEQ(arg0 = <elvis>, arg1 = null) -> y
      else -> <elvis>
    }
  }
}

fun main() {
  elvisLike<String>(x = "", y = "").<get-length>() /*~> Unit */
  elvisLike<String?>(x = null, y = "").<get-length>() /*~> Unit */
  elvisLike<String>(x = "", y = "").<get-length>() /*~> Unit */
  elvisLike<String?>(x = null, y = "").<get-length>() /*~> Unit */
}

