about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorTakayuki Maeda <takoyaki0316@gmail.com>2022-08-24 11:34:14 +0900
committerTakayuki Maeda <takoyaki0316@gmail.com>2022-08-24 11:34:14 +0900
commit3855e039a2c095f2e54b2f389f29e200293774ac (patch)
tree18958c3dc1c0db4da4292f04d9fda00e85e8011d /src
parent87991d5f5d72d6baca490141cb890211ba2f3843 (diff)
do not suggest adding a bound to a opaque type
Diffstat (limited to 'src')
-rw-r--r--src/test/ui/regions/do-not-suggest-adding-bound-to-opaque-type.rs29
-rw-r--r--src/test/ui/regions/do-not-suggest-adding-bound-to-opaque-type.stderr14
2 files changed, 43 insertions, 0 deletions
diff --git a/src/test/ui/regions/do-not-suggest-adding-bound-to-opaque-type.rs b/src/test/ui/regions/do-not-suggest-adding-bound-to-opaque-type.rs
new file mode 100644
index 00000000000..5340288051a
--- /dev/null
+++ b/src/test/ui/regions/do-not-suggest-adding-bound-to-opaque-type.rs
@@ -0,0 +1,29 @@
+#![feature(allocator_api)]
+
+use std::{
+    alloc::{AllocError, Allocator, Layout},
+    ptr::NonNull,
+};
+
+struct GhostBump;
+
+unsafe impl Allocator for &GhostBump {
+    fn allocate(&self, layout: Layout) -> Result<NonNull<[u8]>, AllocError> {
+        todo!()
+    }
+
+    unsafe fn deallocate(&self, ptr: NonNull<u8>, layout: Layout) {
+        todo!()
+    }
+}
+
+fn foo() -> impl Iterator<Item = usize> {
+    let arena = GhostBump;
+    let mut vec = Vec::new_in(&arena); //~ ERROR `arena` does not live long enough
+    vec.push(1);
+    vec.push(2);
+    vec.push(3);
+    vec.into_iter()
+}
+
+fn main() {}
diff --git a/src/test/ui/regions/do-not-suggest-adding-bound-to-opaque-type.stderr b/src/test/ui/regions/do-not-suggest-adding-bound-to-opaque-type.stderr
new file mode 100644
index 00000000000..677b81956f9
--- /dev/null
+++ b/src/test/ui/regions/do-not-suggest-adding-bound-to-opaque-type.stderr
@@ -0,0 +1,14 @@
+error[E0597]: `arena` does not live long enough
+  --> $DIR/do-not-suggest-adding-bound-to-opaque-type.rs:22:31
+   |
+LL |     let mut vec = Vec::new_in(&arena);
+   |                               ^^^^^^ borrowed value does not live long enough
+...
+LL |     vec.into_iter()
+   |     --------------- opaque type requires that `arena` is borrowed for `'static`
+LL | }
+   | - `arena` dropped here while still borrowed
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0597`.