From 698f8c2f01ea549d77d7dc3338a12e04c11057b9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:02:58 +0200 Subject: Adding upstream version 1.64.0+dfsg1. Signed-off-by: Daniel Baumann --- src/test/ui/issues/issue-27401-dropflag-reinit.rs | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/test/ui/issues/issue-27401-dropflag-reinit.rs (limited to 'src/test/ui/issues/issue-27401-dropflag-reinit.rs') diff --git a/src/test/ui/issues/issue-27401-dropflag-reinit.rs b/src/test/ui/issues/issue-27401-dropflag-reinit.rs new file mode 100644 index 000000000..ab54af29b --- /dev/null +++ b/src/test/ui/issues/issue-27401-dropflag-reinit.rs @@ -0,0 +1,26 @@ +// run-pass + +// Check that when a `let`-binding occurs in a loop, its associated +// drop-flag is reinitialized (to indicate "needs-drop" at the end of +// the owning variable's scope). + +struct A<'a>(&'a mut i32); + +impl<'a> Drop for A<'a> { + fn drop(&mut self) { + *self.0 += 1; + } +} + +fn main() { + let mut cnt = 0; + for i in 0..2 { + let a = A(&mut cnt); + if i == 1 { // Note that + break; // both this break + } // and also + drop(a); // this move of `a` + // are necessary to expose the bug + } + assert_eq!(cnt, 2); +} -- cgit v1.2.3