about summary refs log tree commit diff
path: root/tests/ui/drop
diff options
context:
space:
mode:
authorSamuel Tardieu <sam@rfc1149.net>2025-08-05 03:51:33 +0200
committerGitHub <noreply@github.com>2025-08-05 03:51:33 +0200
commit58b00b088ed88a6c6ca6f80599f6abdd84c373a5 (patch)
treecd4648849e9112f9ec4af220fdaa8b66972ed362 /tests/ui/drop
parent2e97165e923103866237dacde44fd793616eaa3f (diff)
parent807d3406c215a9b3078e69ffc1a956b77f685ae9 (diff)
downloadrust-58b00b088ed88a6c6ca6f80599f6abdd84c373a5.tar.gz
rust-58b00b088ed88a6c6ca6f80599f6abdd84c373a5.zip
Rollup merge of #144548 - Oneirical:uncountable-integer-2, r=jieyouxu
Rehome 21 `tests/ui/issues/` tests to other subdirectories under `tests/ui/`

rust-lang/rust#143902 divided into smaller, easier to review chunks.

Part of rust-lang/rust#133895

Methodology:

1. Refer to the previously written `tests/ui/SUMMARY.md`
2. Find an appropriate category for the test, using the original issue thread and the test contents.
3. Add the issue URL at the bottom (not at the top, as that would mess up stderr line numbers)
4. Rename the tests to make their purpose clearer

Inspired by the methodology that ``@Kivooeo`` was using.

r? ``@jieyouxu``
Diffstat (limited to 'tests/ui/drop')
-rw-r--r--tests/ui/drop/destructor-run-for-expression-4734.rs39
1 files changed, 39 insertions, 0 deletions
diff --git a/tests/ui/drop/destructor-run-for-expression-4734.rs b/tests/ui/drop/destructor-run-for-expression-4734.rs
new file mode 100644
index 00000000000..57971ee5ef7
--- /dev/null
+++ b/tests/ui/drop/destructor-run-for-expression-4734.rs
@@ -0,0 +1,39 @@
+// https://github.com/rust-lang/rust/issues/4734
+//@ run-pass
+#![allow(dead_code)]
+// Ensures that destructors are run for expressions of the form "e;" where
+// `e` is a type which requires a destructor.
+
+// FIXME(static_mut_refs): Do not allow `static_mut_refs` lint
+#![allow(static_mut_refs)]
+#![allow(path_statements)]
+
+struct A { n: isize }
+struct B;
+
+static mut NUM_DROPS: usize = 0;
+
+impl Drop for A {
+    fn drop(&mut self) {
+        unsafe { NUM_DROPS += 1; }
+    }
+}
+
+impl Drop for B {
+    fn drop(&mut self) {
+        unsafe { NUM_DROPS += 1; }
+    }
+}
+
+fn main() {
+    assert_eq!(unsafe { NUM_DROPS }, 0);
+    { let _a = A { n: 1 }; }
+    assert_eq!(unsafe { NUM_DROPS }, 1);
+    { A { n: 3 }; }
+    assert_eq!(unsafe { NUM_DROPS }, 2);
+
+    { let _b = B; }
+    assert_eq!(unsafe { NUM_DROPS }, 3);
+    { B; }
+    assert_eq!(unsafe { NUM_DROPS }, 4);
+}