summaryrefslogtreecommitdiffstats
path: root/src/test/ui/btreemap
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/btreemap')
-rw-r--r--src/test/ui/btreemap/btreemap_dropck.rs16
-rw-r--r--src/test/ui/btreemap/btreemap_dropck.stderr13
-rw-r--r--src/test/ui/btreemap/btreemap_into_iterator_lifetime.rs23
3 files changed, 52 insertions, 0 deletions
diff --git a/src/test/ui/btreemap/btreemap_dropck.rs b/src/test/ui/btreemap/btreemap_dropck.rs
new file mode 100644
index 000000000..c58727df3
--- /dev/null
+++ b/src/test/ui/btreemap/btreemap_dropck.rs
@@ -0,0 +1,16 @@
+struct PrintOnDrop<'a>(&'a str);
+
+impl Drop for PrintOnDrop<'_> {
+ fn drop(&mut self) {
+ println!("printint: {}", self.0);
+ }
+}
+
+use std::collections::BTreeMap;
+use std::iter::FromIterator;
+
+fn main() {
+ let s = String::from("Hello World!");
+ let _map = BTreeMap::from_iter([((), PrintOnDrop(&s))]);
+ drop(s); //~ ERROR cannot move out of `s` because it is borrowed
+}
diff --git a/src/test/ui/btreemap/btreemap_dropck.stderr b/src/test/ui/btreemap/btreemap_dropck.stderr
new file mode 100644
index 000000000..e953e7ae8
--- /dev/null
+++ b/src/test/ui/btreemap/btreemap_dropck.stderr
@@ -0,0 +1,13 @@
+error[E0505]: cannot move out of `s` because it is borrowed
+ --> $DIR/btreemap_dropck.rs:15:10
+ |
+LL | let _map = BTreeMap::from_iter([((), PrintOnDrop(&s))]);
+ | -- borrow of `s` occurs here
+LL | drop(s);
+ | ^ move out of `s` occurs here
+LL | }
+ | - borrow might be used here, when `_map` is dropped and runs the `Drop` code for type `BTreeMap`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0505`.
diff --git a/src/test/ui/btreemap/btreemap_into_iterator_lifetime.rs b/src/test/ui/btreemap/btreemap_into_iterator_lifetime.rs
new file mode 100644
index 000000000..fda825bc6
--- /dev/null
+++ b/src/test/ui/btreemap/btreemap_into_iterator_lifetime.rs
@@ -0,0 +1,23 @@
+// check-pass
+
+use std::collections::{BTreeMap, HashMap};
+
+trait Map
+where
+ for<'a> &'a Self: IntoIterator<Item = (&'a Self::Key, &'a Self::Value)>,
+{
+ type Key;
+ type Value;
+}
+
+impl<K, V> Map for HashMap<K, V> {
+ type Key = K;
+ type Value = V;
+}
+
+impl<K, V> Map for BTreeMap<K, V> {
+ type Key = K;
+ type Value = V;
+}
+
+fn main() {}