// !LANGUAGE: +DefinitelyNotNullTypeParameters fun toDefNotNull(s: T): T!! = s!! fun removeQuestionMark(x: K?): K = x!! fun Any.foo() {} fun expectNN(e: E!!) {} fun main(x: F, y: F, z: F, w: F, m: F) { val y1 = toDefNotNull(x) // K instead of K!! val y2: F!! = toDefNotNull(x) // K instead of K!! val x1 = removeQuestionMark(x) // T or T!! val x2: F!! = removeQuestionMark(x) // T or T!! val z1 = x!! val z2: F!! = y!! val w1 = if (z != null) z else return val w2: F!! = if (w != null) w else return y1.foo() y2.foo() x1.foo() x2.foo() z1.foo() z2.foo() w1.foo() w2.foo() expectNN(m) expectNN(m!!) }