public fun foo(x: String?, y: String?): Int { do { // After the check, smart cast should work if (x != null) { if (x == "abc") break y!!.length } else { y!!.length } // y!! in both branches y.length } while (true) // break is possible before so !! is necessary return y!!.length }