about summary refs log tree commit diff
path: root/tests/ui/binding/ref-pattern-drop-behavior-8860.rs
diff options
context:
space:
mode:
authorMatthias Krüger <476013+matthiaskrgr@users.noreply.github.com>2025-08-29 12:37:30 +0200
committerGitHub <noreply@github.com>2025-08-29 12:37:30 +0200
commit47f1df5ca35217ca5e21ffd1f1daa3cb623470e2 (patch)
tree1bd03d02f6a7e788a454662785a20e9f56ac7f73 /tests/ui/binding/ref-pattern-drop-behavior-8860.rs
parente15744e7a4095a868cc3d145ae81bd6660247519 (diff)
parent2dc4638c4637bf8ddb83577535317dad21abdf6d (diff)
Rollup merge of #145676 - Oneirical:uncountable-integer-9, r=jieyouxu
Rehome 30 `tests/ui/issues/` tests to other subdirectories under `tests/ui/` [#2 of Batch #2]

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/binding/ref-pattern-drop-behavior-8860.rs')
-rw-r--r--tests/ui/binding/ref-pattern-drop-behavior-8860.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/ui/binding/ref-pattern-drop-behavior-8860.rs b/tests/ui/binding/ref-pattern-drop-behavior-8860.rs
new file mode 100644
index 00000000000..1a67caf021c
--- /dev/null
+++ b/tests/ui/binding/ref-pattern-drop-behavior-8860.rs
@@ -0,0 +1,52 @@
+// https://github.com/rust-lang/rust/issues/8860
+//@ run-pass
+// FIXME(static_mut_refs): this could use an atomic
+#![allow(static_mut_refs)]
+#![allow(dead_code)]
+
+static mut DROP: isize = 0;
+static mut DROP_S: isize = 0;
+static mut DROP_T: isize = 0;
+
+struct S;
+impl Drop for S {
+    fn drop(&mut self) {
+        unsafe {
+            DROP_S += 1;
+            DROP += 1;
+        }
+    }
+}
+fn f(ref _s: S) {}
+
+struct T { i: isize }
+impl Drop for T {
+    fn drop(&mut self) {
+        unsafe {
+            DROP_T += 1;
+            DROP += 1;
+        }
+    }
+}
+fn g(ref _t: T) {}
+
+fn do_test() {
+    let s = S;
+    f(s);
+    unsafe {
+        assert_eq!(1, DROP);
+        assert_eq!(1, DROP_S);
+    }
+    let t = T { i: 1 };
+    g(t);
+    unsafe { assert_eq!(1, DROP_T); }
+}
+
+fn main() {
+    do_test();
+    unsafe {
+        assert_eq!(2, DROP);
+        assert_eq!(1, DROP_S);
+        assert_eq!(1, DROP_T);
+    }
+}