diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:19:13 +0000 |
commit | 218caa410aa38c29984be31a5229b9fa717560ee (patch) | |
tree | c54bd55eeb6e4c508940a30e94c0032fbd45d677 /src/test/ui/consts/std/cell.rs | |
parent | Releasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-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/consts/std/cell.rs')
-rw-r--r-- | src/test/ui/consts/std/cell.rs | 46 |
1 files changed, 0 insertions, 46 deletions
diff --git a/src/test/ui/consts/std/cell.rs b/src/test/ui/consts/std/cell.rs deleted file mode 100644 index f1ef54131..000000000 --- a/src/test/ui/consts/std/cell.rs +++ /dev/null @@ -1,46 +0,0 @@ -#![feature(const_refs_to_cell)] - -use std::cell::*; - -// not ok, because this creates a dangling pointer, just like `let x = Cell::new(42).as_ptr()` would -static FOO: Wrap<*mut u32> = Wrap(Cell::new(42).as_ptr()); -//~^ ERROR encountered dangling pointer -const FOO_CONST: Wrap<*mut u32> = Wrap(Cell::new(42).as_ptr()); -//~^ ERROR encountered dangling pointer - -// Ok, these are just base values and it is the `Wrap` author's job to uphold `Send` and `Sync` -// invariants, since they used `unsafe impl`. -static FOO3: Wrap<Cell<u32>> = Wrap(Cell::new(42)); -const FOO3_CONST: Wrap<Cell<u32>> = Wrap(Cell::new(42)); - -// ok, we are referring to the memory of another static item. -static FOO4: Wrap<*mut u32> = Wrap(FOO3.0.as_ptr()); - -// not ok, the use of a constant here is equivalent to an inline declaration of the value, so -// its memory will get freed before the constant is finished evaluating, thus creating a dangling -// pointer. This would happen exactly the same at runtime. -const FOO4_CONST: Wrap<*mut u32> = Wrap(FOO3_CONST.0.as_ptr()); -//~^ ERROR encountered dangling pointer - -// not ok, because the `as_ptr` call takes a reference to a temporary that will get freed -// before the constant is finished evaluating. -const FOO2: *mut u32 = Cell::new(42).as_ptr(); -//~^ ERROR encountered dangling pointer - -struct IMSafeTrustMe(UnsafeCell<u32>); -unsafe impl Send for IMSafeTrustMe {} -unsafe impl Sync for IMSafeTrustMe {} - -static BAR: IMSafeTrustMe = IMSafeTrustMe(UnsafeCell::new(5)); - - - -struct Wrap<T>(T); -unsafe impl<T> Send for Wrap<T> {} -unsafe impl<T> Sync for Wrap<T> {} - -static BAR_PTR: Wrap<*mut u32> = Wrap(BAR.0.get()); - -const fn fst_ref<T, U>(x: &(T, U)) -> &T { &x.0 } - -fn main() {} |