summaryrefslogtreecommitdiffstats
path: root/tests/ui/drop-bounds
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
commit64d98f8ee037282c35007b64c2649055c56af1db (patch)
tree5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /tests/ui/drop-bounds
parentAdding debian version 1.67.1+dfsg1-1. (diff)
downloadrustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz
rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/drop-bounds')
-rw-r--r--tests/ui/drop-bounds/drop-bounds-impl-drop.rs14
-rw-r--r--tests/ui/drop-bounds/drop-bounds.rs19
-rw-r--r--tests/ui/drop-bounds/drop-bounds.stderr50
3 files changed, 83 insertions, 0 deletions
diff --git a/tests/ui/drop-bounds/drop-bounds-impl-drop.rs b/tests/ui/drop-bounds/drop-bounds-impl-drop.rs
new file mode 100644
index 000000000..063efc7b3
--- /dev/null
+++ b/tests/ui/drop-bounds/drop-bounds-impl-drop.rs
@@ -0,0 +1,14 @@
+// run-pass
+#![deny(drop_bounds)]
+// As a special exemption, `impl Drop` in the return position raises no error.
+// This allows a convenient way to return an unnamed drop guard.
+fn voldemort_type() -> impl Drop {
+ struct Voldemort;
+ impl Drop for Voldemort {
+ fn drop(&mut self) {}
+ }
+ Voldemort
+}
+fn main() {
+ let _ = voldemort_type();
+}
diff --git a/tests/ui/drop-bounds/drop-bounds.rs b/tests/ui/drop-bounds/drop-bounds.rs
new file mode 100644
index 000000000..c73538278
--- /dev/null
+++ b/tests/ui/drop-bounds/drop-bounds.rs
@@ -0,0 +1,19 @@
+#![deny(drop_bounds)]
+fn foo<T: Drop>() {} //~ ERROR
+fn bar<U>()
+where
+ U: Drop, //~ ERROR
+{
+}
+fn baz(_x: impl Drop) {} //~ ERROR
+struct Foo<T: Drop> { //~ ERROR
+ _x: T
+}
+struct Bar<U> where U: Drop { //~ ERROR
+ _x: U
+}
+trait Baz: Drop { //~ ERROR
+}
+impl<T: Drop> Baz for T { //~ ERROR
+}
+fn main() {}
diff --git a/tests/ui/drop-bounds/drop-bounds.stderr b/tests/ui/drop-bounds/drop-bounds.stderr
new file mode 100644
index 000000000..3ffb855a5
--- /dev/null
+++ b/tests/ui/drop-bounds/drop-bounds.stderr
@@ -0,0 +1,50 @@
+error: bounds on `T: Drop` are most likely incorrect, consider instead using `std::mem::needs_drop` to detect whether a type can be trivially dropped
+ --> $DIR/drop-bounds.rs:2:11
+ |
+LL | fn foo<T: Drop>() {}
+ | ^^^^
+ |
+note: the lint level is defined here
+ --> $DIR/drop-bounds.rs:1:9
+ |
+LL | #![deny(drop_bounds)]
+ | ^^^^^^^^^^^
+
+error: bounds on `U: Drop` are most likely incorrect, consider instead using `std::mem::needs_drop` to detect whether a type can be trivially dropped
+ --> $DIR/drop-bounds.rs:5:8
+ |
+LL | U: Drop,
+ | ^^^^
+
+error: bounds on `impl Drop: Drop` are most likely incorrect, consider instead using `std::mem::needs_drop` to detect whether a type can be trivially dropped
+ --> $DIR/drop-bounds.rs:8:17
+ |
+LL | fn baz(_x: impl Drop) {}
+ | ^^^^
+
+error: bounds on `T: Drop` are most likely incorrect, consider instead using `std::mem::needs_drop` to detect whether a type can be trivially dropped
+ --> $DIR/drop-bounds.rs:9:15
+ |
+LL | struct Foo<T: Drop> {
+ | ^^^^
+
+error: bounds on `U: Drop` are most likely incorrect, consider instead using `std::mem::needs_drop` to detect whether a type can be trivially dropped
+ --> $DIR/drop-bounds.rs:12:24
+ |
+LL | struct Bar<U> where U: Drop {
+ | ^^^^
+
+error: bounds on `Self: Drop` are most likely incorrect, consider instead using `std::mem::needs_drop` to detect whether a type can be trivially dropped
+ --> $DIR/drop-bounds.rs:15:12
+ |
+LL | trait Baz: Drop {
+ | ^^^^
+
+error: bounds on `T: Drop` are most likely incorrect, consider instead using `std::mem::needs_drop` to detect whether a type can be trivially dropped
+ --> $DIR/drop-bounds.rs:17:9
+ |
+LL | impl<T: Drop> Baz for T {
+ | ^^^^
+
+error: aborting due to 7 previous errors
+