diff options
| author | Takayuki Maeda <takoyaki0316@gmail.com> | 2022-08-24 11:34:14 +0900 |
|---|---|---|
| committer | Takayuki Maeda <takoyaki0316@gmail.com> | 2022-08-24 11:34:14 +0900 |
| commit | 3855e039a2c095f2e54b2f389f29e200293774ac (patch) | |
| tree | 18958c3dc1c0db4da4292f04d9fda00e85e8011d /src | |
| parent | 87991d5f5d72d6baca490141cb890211ba2f3843 (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.rs | 29 | ||||
| -rw-r--r-- | src/test/ui/regions/do-not-suggest-adding-bound-to-opaque-type.stderr | 14 |
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`. |
