From cf94bdc0742c13e2a0cac864c478b8626b266e1b Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:11:38 +0200 Subject: Merging upstream version 1.66.0+dfsg1. Signed-off-by: Daniel Baumann --- src/test/ui/drop/drop_order.rs | 64 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'src/test/ui/drop/drop_order.rs') diff --git a/src/test/ui/drop/drop_order.rs b/src/test/ui/drop/drop_order.rs index e42150dcc..42385216a 100644 --- a/src/test/ui/drop/drop_order.rs +++ b/src/test/ui/drop/drop_order.rs @@ -1,4 +1,6 @@ // run-pass +// compile-flags: -Z validate-mir +#![feature(let_chains)] use std::cell::RefCell; use std::convert::TryInto; @@ -116,6 +118,58 @@ impl DropOrderCollector { } } + fn let_chain(&self) { + // take the "then" branch + if self.option_loud_drop(2).is_some() // 2 + && self.option_loud_drop(1).is_some() // 1 + && let Some(_d) = self.option_loud_drop(4) { // 4 + self.print(3); // 3 + } + + // take the "else" branch + if self.option_loud_drop(6).is_some() // 2 + && self.option_loud_drop(5).is_some() // 1 + && let None = self.option_loud_drop(8) { // 4 + unreachable!(); + } else { + self.print(7); // 3 + } + + // let exprs interspersed + if self.option_loud_drop(9).is_some() // 1 + && let Some(_d) = self.option_loud_drop(13) // 5 + && self.option_loud_drop(10).is_some() // 2 + && let Some(_e) = self.option_loud_drop(12) { // 4 + self.print(11); // 3 + } + + // let exprs first + if let Some(_d) = self.option_loud_drop(18) // 5 + && let Some(_e) = self.option_loud_drop(17) // 4 + && self.option_loud_drop(14).is_some() // 1 + && self.option_loud_drop(15).is_some() { // 2 + self.print(16); // 3 + } + + // let exprs last + if self.option_loud_drop(20).is_some() // 2 + && self.option_loud_drop(19).is_some() // 1 + && let Some(_d) = self.option_loud_drop(23) // 5 + && let Some(_e) = self.option_loud_drop(22) { // 4 + self.print(21); // 3 + } + } + + fn while_(&self) { + let mut v = self.option_loud_drop(4); + while let Some(_d) = v + && self.option_loud_drop(1).is_some() + && self.option_loud_drop(2).is_some() { + self.print(3); + v = None; + } + } + fn assert_sorted(self) { assert!( self.0 @@ -142,4 +196,14 @@ fn main() { let collector = DropOrderCollector::default(); collector.match_(); collector.assert_sorted(); + + println!("-- let chain --"); + let collector = DropOrderCollector::default(); + collector.let_chain(); + collector.assert_sorted(); + + println!("-- while --"); + let collector = DropOrderCollector::default(); + collector.while_(); + collector.assert_sorted(); } -- cgit v1.2.3