| //@ edition: 2021 | 
 | //@ check-pass | 
 |  | 
 | #![deny(if_let_rescope)] | 
 |  | 
 | struct Drop; | 
 | impl std::ops::Drop for Drop { | 
 |     fn drop(&mut self) { | 
 |         println!("drop") | 
 |     } | 
 | } | 
 |  | 
 | impl Drop { | 
 |     fn as_ref(&self) -> Option<i32> { | 
 |         Some(1) | 
 |     } | 
 | } | 
 |  | 
 | fn consume(_: impl Sized) -> Option<i32> { Some(1) } | 
 |  | 
 | fn main() { | 
 |     let drop = Drop; | 
 |  | 
 |     // Make sure we don't drop if we don't actually make a temporary. | 
 |     if let None = drop.as_ref() {} else {} | 
 |  | 
 |     // Make sure we don't lint if we consume the droppy value. | 
 |     if let None = consume(Drop) {} else {} | 
 |  | 
 |     // Make sure we don't lint on field exprs of place exprs. | 
 |     let tup_place = (Drop, ()); | 
 |     if let None = consume(tup_place.1) {} else {} | 
 | } |