// !DIAGNOSTICS: -UNUSED_EXPRESSION // SKIP_TXT /* * KOTLIN DIAGNOSTICS NOT LINKED SPEC TEST (POSITIVE) * * SECTIONS: dfa * NUMBER: 10 * DESCRIPTION: Raw data flow analysis test * HELPERS: classes, functions, properties */ // TESTCASE NUMBER: 1 fun case_1() { val x = expandInv(Inv(select(10, null))) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 2 fun case_2() { val x = expandOut(Out(select(10, null))) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 3 fun case_3() { val x = expandInv(Inv(select(10, null))) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 4 fun case_4() { val x = expandOut(Out(select(10, null))) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 5 fun case_5() { val x = expandIn(In()) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 6 fun case_6() { val x = expandIn(In()) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 7 fun case_7(x: MutableMap) = select(x.values.first(), x.keys.first()) fun case_7() { val x = case_7(mutableMapOf(10 to 10)) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 8 fun case_8(x: MutableMap) = select(x.values.first(), x.keys.first()) fun case_8() { val x = case_8(mutableMapOf(10 to null)) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 9 fun case_9(x: MutableMap) = select(x.values.first(), x.keys.first()) fun case_9() { val x = case_9(mutableMapOf(null to 10)) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 10 fun case_10(x: MutableMap) = select(x.values.first(), x.keys.first()) fun case_10() { val x = case_10(mutableMapOf(10 to 10)) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 11 fun case_11(x: MutableMap) = select(x.values.first(), x.keys.first()) fun case_11() { val x = case_11(mutableMapOf(10 to 10)) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 12 fun case_12(x: MutableMap) = select(x.values.first(), x.keys.first()) fun case_12() { val x = case_12(mutableMapOf(10 to 11)) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } /* * TESTCASE NUMBER: 13 * ISSUES: KT-28334 * NOTE: before fix of the issue type is inferred to {Int? & Byte? & Short? & Long?} (smart cast from {Int? & Byte? & Short? & Long?}?) */ fun case_13(x: Out?, y: Out) = select(x, y) fun case_13() { val x = case_13(Out(), Out()) if (x != null) { & Out?")!>x & Out?"), DEBUG_INFO_SMARTCAST!>x.equals(null) & Out?"), DEBUG_INFO_SMARTCAST!>x.propT & Out?"), DEBUG_INFO_SMARTCAST!>x.propAny & Out?")!>x.propNullableT & Out?")!>x.propNullableAny & Out?"), DEBUG_INFO_SMARTCAST!>x.funT() & Out?"), DEBUG_INFO_SMARTCAST!>x.funAny() & Out?")!>x.funNullableT() & Out?")!>x.funNullableAny() val y = x.get() if (y != null) { y y.equals(null) y.propT y.propAny y.propNullableT y.propNullableAny y.funT() y.funAny() y.funNullableT() y.funNullableAny() } } } // TESTCASE NUMBER: 14 fun case_14(x: Out?, y: Out) = select(x, y) fun case_14() { val x = case_14(Out(), Out()) if (x != null) { & Out?")!>x & Out?"), DEBUG_INFO_SMARTCAST!>x.equals(null) & Out?"), DEBUG_INFO_SMARTCAST!>x.propT & Out?"), DEBUG_INFO_SMARTCAST!>x.propAny & Out?")!>x.propNullableT & Out?")!>x.propNullableAny & Out?"), DEBUG_INFO_SMARTCAST!>x.funT() & Out?"), DEBUG_INFO_SMARTCAST!>x.funAny() & Out?")!>x.funNullableT() & Out?")!>x.funNullableAny() val y = x.get() if (y != null) { y y.equals(null) y.propT y.propAny y.propNullableT y.propNullableAny y.funT() y.funAny() y.funNullableT() y.funNullableAny() } } } // TESTCASE NUMBER: 15 fun case_15(x: Out, y: Out?) = select(x, y) fun case_15() { val x = case_15(Out(), Out()) if (x != null) { & Out?")!>x & Out?"), DEBUG_INFO_SMARTCAST!>x.equals(null) & Out?"), DEBUG_INFO_SMARTCAST!>x.propT & Out?"), DEBUG_INFO_SMARTCAST!>x.propAny & Out?")!>x.propNullableT & Out?")!>x.propNullableAny & Out?"), DEBUG_INFO_SMARTCAST!>x.funT() & Out?"), DEBUG_INFO_SMARTCAST!>x.funAny() & Out?")!>x.funNullableT() & Out?")!>x.funNullableAny() val y = x.get() if (y != null) { y y.equals(null) y.propT y.propAny y.propNullableT y.propNullableAny y.funT() y.funAny() y.funNullableT() y.funNullableAny() } } } /* * TESTCASE NUMBER: 16 * ISSUES: KT-28334 * NOTE: before fix of the issue type is inferred to {Int? & Byte? & Short? & Long?} (smart cast from {Int? & Byte? & Short? & Long?}?) */ fun case_16(x: Out, y: Out) = select(x, select(y, null)) fun case_16() { val x = case_16(Out(), Out()) if (x != null) { & Out?")!>x & Out?"), DEBUG_INFO_SMARTCAST!>x.equals(null) & Out?"), DEBUG_INFO_SMARTCAST!>x.propT & Out?"), DEBUG_INFO_SMARTCAST!>x.propAny & Out?")!>x.propNullableT & Out?")!>x.propNullableAny & Out?"), DEBUG_INFO_SMARTCAST!>x.funT() & Out?"), DEBUG_INFO_SMARTCAST!>x.funAny() & Out?")!>x.funNullableT() & Out?")!>x.funNullableAny() val y = x.get() if (y != null) { y y.equals(null) y.propT y.propAny y.propNullableT y.propNullableAny y.funT() y.funAny() y.funNullableT() y.funNullableAny() } } } // TESTCASE NUMBER: 17 fun case_17(x: Out, y: Out) = select(x, select(y, null)) fun case_17() { val x = case_17(Out(), Out()) if (x != null) { & Out?")!>x & Out?"), DEBUG_INFO_SMARTCAST!>x.equals(null) & Out?"), DEBUG_INFO_SMARTCAST!>x.propT & Out?"), DEBUG_INFO_SMARTCAST!>x.propAny & Out?")!>x.propNullableT & Out?")!>x.propNullableAny & Out?"), DEBUG_INFO_SMARTCAST!>x.funT() & Out?"), DEBUG_INFO_SMARTCAST!>x.funAny() & Out?")!>x.funNullableT() & Out?")!>x.funNullableAny() val y = x.get() if (y != null) { y y.equals(null) y.propT y.propAny y.propNullableT y.propNullableAny y.funT() y.funAny() y.funNullableT() y.funNullableAny() } } } /* * TESTCASE NUMBER: 18 * ISSUES: KT-28334 * NOTE: before fix of the issue type is inferred to {Int? & Byte? & Short? & Long?} (smart cast from {Int? & Byte? & Short? & Long?}?) */ fun case_18(x: Out, y: Out) = select(x, y) fun case_18() { val x = case_18(Out(), Out()) ")!>x ")!>x.equals(null) ")!>x.propT ")!>x.propAny ")!>x.propNullableT ")!>x.propNullableAny ")!>x.funT() ")!>x.funAny() ")!>x.funNullableT() ")!>x.funNullableAny() val y = x.get() if (y != null) { y y.equals(null) y.propT y.propAny y.propNullableT y.propNullableAny y.funT() y.funAny() y.funNullableT() y.funNullableAny() } } // TESTCASE NUMBER: 19 fun case_19(x: Out, y: Out) = select(x, y) fun case_19() { val x = case_19(Out(), Out()) ")!>x ")!>x.equals(null) ")!>x.propT ")!>x.propAny ")!>x.propNullableT ")!>x.propNullableAny ")!>x.funT() ")!>x.funAny() ")!>x.funNullableT() ")!>x.funNullableAny() val y = x.get() if (y != null) { y y.equals(null) y.propT y.propAny y.propNullableT y.propNullableAny y.funT() y.funAny() y.funNullableT() y.funNullableAny() } } // TESTCASE NUMBER: 20 fun case_20(x: Out, y: Out) = select(x.get(), y.get()) fun case_20(y: Int?) { val x = case_20(Out(y), Out()) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 21 fun case_21(x: Out, y: Out) = select(x.get(), y.get()) fun case_21(y: Int?) { val x = case_21(Out(y), Out()) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 22 fun case_22(x: Out, y: Out): T? = select(x.get(), y.get()) fun case_22(y: Int?) { val x = case_22(Out(y), Out()) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } // TESTCASE NUMBER: 23 fun case_23(x: Out, y: Out): T = select(x.get(), y.get()) fun case_23(y: Int?) { val x = case_13(Out(y), Out()) if (x != null) { & Out?")!>x & Out?"), DEBUG_INFO_SMARTCAST!>x.equals(null) & Out?"), DEBUG_INFO_SMARTCAST!>x.propT & Out?"), DEBUG_INFO_SMARTCAST!>x.propAny & Out?")!>x.propNullableT & Out?")!>x.propNullableAny & Out?"), DEBUG_INFO_SMARTCAST!>x.funT() & Out?"), DEBUG_INFO_SMARTCAST!>x.funAny() & Out?")!>x.funNullableT() & Out?")!>x.funNullableAny() } } // TESTCASE NUMBER: 24 fun case_24(x: Out, y: Out) where F : E? = select(x.get(), y.get()) fun case_24(y: Int) { val x = case_13(Out(y), Out()) if (x != null) { & Out?")!>x & Out?"), DEBUG_INFO_SMARTCAST!>x.equals(null) & Out?"), DEBUG_INFO_SMARTCAST!>x.propT & Out?"), DEBUG_INFO_SMARTCAST!>x.propAny & Out?")!>x.propNullableT & Out?")!>x.propNullableAny & Out?"), DEBUG_INFO_SMARTCAST!>x.funT() & Out?"), DEBUG_INFO_SMARTCAST!>x.funAny() & Out?")!>x.funNullableT() & Out?")!>x.funNullableAny() } } /* * TESTCASE NUMBER: 25 * UNEXPECTED BEHAVIOUR * ISSUES: KT-29054 */ fun , C: Out, D: Out, E: Out, F> case_25(x: F, y: Out) where F : Out = select(x.get()?.get()?.get()?.get()?.get(), y.get().get().get()) fun case_25(y: Int) { val x = case_25(Out(Out(Out(Out(Out(y))))), Out(Out(Out(y)))) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } } /* * TESTCASE NUMBER: 26 * UNEXPECTED BEHAVIOUR * ISSUES: KT-29054 */ fun , C: Out, D: Out, E: Out, F> case_26(x: F, y: Out) where F : Out = select(x.get()?.get()?.get()?.get()?.get(), y.get().get().get()) fun case_26(y: Int) { val x = case_26(Out(Out(Out(Out(Out(y))))), Out(Out(Out(y)))) if (x != null) { x x.equals(null) x.propT x.propAny x.propNullableT x.propNullableAny x.funT() x.funAny() x.funNullableT() x.funNullableAny() } }