@@ -2270,6 +2270,54 @@ fn test_into_iter_drop_leak_height_0() {
22702270 assert_eq ! ( e. dropped( ) , 1 ) ;
22712271}
22722272
2273+ #[ test]
2274+ #[ cfg_attr( not( panic = "unwind" ) , ignore = "test requires unwinding support" ) ]
2275+ fn test_into_iter_drop_leak_kv_panic_in_key ( ) {
2276+ let a_k = CrashTestDummy :: new ( 0 ) ;
2277+ let a_v = CrashTestDummy :: new ( 1 ) ;
2278+ let b_k = CrashTestDummy :: new ( 2 ) ;
2279+ let b_v = CrashTestDummy :: new ( 3 ) ;
2280+ let c_k = CrashTestDummy :: new ( 4 ) ;
2281+ let c_v = CrashTestDummy :: new ( 5 ) ;
2282+ let mut map = BTreeMap :: new ( ) ;
2283+ map. insert ( a_k. spawn ( Panic :: Never ) , a_v. spawn ( Panic :: Never ) ) ;
2284+ map. insert ( b_k. spawn ( Panic :: InDrop ) , b_v. spawn ( Panic :: Never ) ) ;
2285+ map. insert ( c_k. spawn ( Panic :: Never ) , c_v. spawn ( Panic :: Never ) ) ;
2286+
2287+ catch_unwind ( move || drop ( map. into_iter ( ) ) ) . unwrap_err ( ) ;
2288+
2289+ assert_eq ! ( a_k. dropped( ) , 1 ) ;
2290+ assert_eq ! ( a_v. dropped( ) , 1 ) ;
2291+ assert_eq ! ( b_k. dropped( ) , 1 ) ;
2292+ assert_eq ! ( b_v. dropped( ) , 1 ) ;
2293+ assert_eq ! ( c_k. dropped( ) , 1 ) ;
2294+ assert_eq ! ( c_v. dropped( ) , 1 ) ;
2295+ }
2296+
2297+ #[ test]
2298+ #[ cfg_attr( not( panic = "unwind" ) , ignore = "test requires unwinding support" ) ]
2299+ fn test_into_iter_drop_leak_kv_panic_in_val ( ) {
2300+ let a_k = CrashTestDummy :: new ( 0 ) ;
2301+ let a_v = CrashTestDummy :: new ( 1 ) ;
2302+ let b_k = CrashTestDummy :: new ( 2 ) ;
2303+ let b_v = CrashTestDummy :: new ( 3 ) ;
2304+ let c_k = CrashTestDummy :: new ( 4 ) ;
2305+ let c_v = CrashTestDummy :: new ( 5 ) ;
2306+ let mut map = BTreeMap :: new ( ) ;
2307+ map. insert ( a_k. spawn ( Panic :: Never ) , a_v. spawn ( Panic :: Never ) ) ;
2308+ map. insert ( b_k. spawn ( Panic :: Never ) , b_v. spawn ( Panic :: InDrop ) ) ;
2309+ map. insert ( c_k. spawn ( Panic :: Never ) , c_v. spawn ( Panic :: Never ) ) ;
2310+
2311+ catch_unwind ( move || drop ( map. into_iter ( ) ) ) . unwrap_err ( ) ;
2312+
2313+ assert_eq ! ( a_k. dropped( ) , 1 ) ;
2314+ assert_eq ! ( a_v. dropped( ) , 1 ) ;
2315+ assert_eq ! ( b_k. dropped( ) , 1 ) ;
2316+ assert_eq ! ( b_v. dropped( ) , 1 ) ;
2317+ assert_eq ! ( c_k. dropped( ) , 1 ) ;
2318+ assert_eq ! ( c_v. dropped( ) , 1 ) ;
2319+ }
2320+
22732321#[ test]
22742322#[ cfg_attr( not( panic = "unwind" ) , ignore = "test requires unwinding support" ) ]
22752323fn test_into_iter_drop_leak_height_1 ( ) {
0 commit comments