summaryrefslogtreecommitdiffstats
path: root/src/test/ui-fulldeps/dropck-tarena-unsound-drop.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
commit218caa410aa38c29984be31a5229b9fa717560ee (patch)
treec54bd55eeb6e4c508940a30e94c0032fbd45d677 /src/test/ui-fulldeps/dropck-tarena-unsound-drop.rs
parentReleasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz
rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui-fulldeps/dropck-tarena-unsound-drop.rs')
-rw-r--r--src/test/ui-fulldeps/dropck-tarena-unsound-drop.rs42
1 files changed, 0 insertions, 42 deletions
diff --git a/src/test/ui-fulldeps/dropck-tarena-unsound-drop.rs b/src/test/ui-fulldeps/dropck-tarena-unsound-drop.rs
deleted file mode 100644
index 86485a988..000000000
--- a/src/test/ui-fulldeps/dropck-tarena-unsound-drop.rs
+++ /dev/null
@@ -1,42 +0,0 @@
-// Check that an arena (TypedArena) cannot carry elements whose drop
-// methods might access borrowed data of lifetime that does not
-// strictly outlive the arena itself.
-//
-// Compare against run-pass/dropck_tarena_sound_drop.rs, which shows a
-// similar setup, but loosens `f` so that the struct `C<'a>` can be
-// fed a lifetime longer than that of the arena.
-//
-// (Also compare against dropck_tarena_cycle_checked.rs, from which
-// this was reduced to better understand its error message.)
-
-#![feature(rustc_private)]
-
-extern crate rustc_arena;
-
-use rustc_arena::TypedArena;
-
-trait HasId { fn count(&self) -> usize; }
-
-struct CheckId<T:HasId> { v: T }
-
-// In the code below, the impl of HasId for `&'a usize` does not
-// actually access the borrowed data, but the point is that the
-// interface to CheckId does not (and cannot) know that, and therefore
-// when encountering a value V of type CheckId<S>, we must
-// conservatively force the type S to strictly outlive V.
-impl<T:HasId> Drop for CheckId<T> {
- fn drop(&mut self) {
- assert!(self.v.count() > 0);
- }
-}
-
-struct C<'a> { v: CheckId<&'a usize>, }
-
-impl<'a> HasId for &'a usize { fn count(&self) -> usize { 1 } }
-
-fn f<'a>(_arena: &'a TypedArena<C<'a>>) {}
-
-fn main() {
- let arena: TypedArena<C> = TypedArena::default();
- f(&arena);
-} //~^ ERROR `arena` does not live long enough