fun <T : Any?> magic(): T {
  return throw Exception()
}

fun <T : Any?> test(value: T, value2: T) {
  val x1: Any = { // BLOCK
    val <elvis>: T = value
    when {
      EQEQ(arg0 = <elvis>, arg1 = null) -> 42
      else -> <elvis>
    }
  }
  val x2: Any = { // BLOCK
    val <elvis>: T = value
    when {
      EQEQ(arg0 = <elvis>, arg1 = null) -> { // BLOCK
        val <elvis>: T = value2
        when {
          EQEQ(arg0 = <elvis>, arg1 = null) -> 42
          else -> <elvis>
        }
      }
      else -> <elvis>
    }
  }
  val x3: Any = { // BLOCK
    val <elvis>: Any? = { // BLOCK
      val <elvis>: T = value
      when {
        EQEQ(arg0 = <elvis>, arg1 = null) -> value2
        else -> <elvis>
      }
    }
    when {
      EQEQ(arg0 = <elvis>, arg1 = null) -> 42
      else -> <elvis>
    }
  }
  val x4: Any = { // BLOCK
    val <elvis>: Any? = { // BLOCK
      val <elvis>: T = value
      when {
        EQEQ(arg0 = <elvis>, arg1 = null) -> value2
        else -> <elvis>
      }
    }
    when {
      EQEQ(arg0 = <elvis>, arg1 = null) -> 42
      else -> <elvis>
    }
  }
  val x5: Any = { // BLOCK
    val <elvis>: Any? = magic<Any?>()
    when {
      EQEQ(arg0 = <elvis>, arg1 = null) -> 42
      else -> <elvis>
    }
  }
  val x6: Any = { // BLOCK
    val <elvis>: Any? = { // BLOCK
      val <elvis>: T = value
      when {
        EQEQ(arg0 = <elvis>, arg1 = null) -> magic<Any?>()
        else -> <elvis>
      }
    }
    when {
      EQEQ(arg0 = <elvis>, arg1 = null) -> 42
      else -> <elvis>
    }
  }
  val x7: Any = { // BLOCK
    val <elvis>: Any? = { // BLOCK
      val <elvis>: Any? = magic<Any?>()
      when {
        EQEQ(arg0 = <elvis>, arg1 = null) -> value
        else -> <elvis>
      }
    }
    when {
      EQEQ(arg0 = <elvis>, arg1 = null) -> 42
      else -> <elvis>
    }
  }
}
