diff options
| author | woppopo <woppopo@protonmail.com> | 2022-01-26 13:06:09 +0900 |
|---|---|---|
| committer | woppopo <woppopo@protonmail.com> | 2022-01-26 13:06:09 +0900 |
| commit | 29932db09bb985072dc68d9d4e4acab09e69562a (patch) | |
| tree | 6f0e8d2b0a52aabfc67996bc5ed4fe0ef9bd162b /src/test | |
| parent | aa6795e2d4cdae6af2ea854744c3bec2eb30d16e (diff) | |
| download | rust-29932db09bb985072dc68d9d4e4acab09e69562a.tar.gz rust-29932db09bb985072dc68d9d4e4acab09e69562a.zip | |
`const_deallocate`: Don't deallocate memory allocated in an another const. Does nothing at runtime.
`const_allocate`: Returns a null pointer at runtime.
Diffstat (limited to 'src/test')
3 files changed, 27 insertions, 4 deletions
diff --git a/src/test/ui/consts/const-eval/heap/alloc_intrinsic_errors.rs b/src/test/ui/consts/const-eval/heap/alloc_intrinsic_errors.rs index 1a1d9a6d540..ac9e8b64b48 100644 --- a/src/test/ui/consts/const-eval/heap/alloc_intrinsic_errors.rs +++ b/src/test/ui/consts/const-eval/heap/alloc_intrinsic_errors.rs @@ -6,11 +6,10 @@ use std::intrinsics; const FOO: i32 = foo(); const fn foo() -> i32 { unsafe { - let _ = intrinsics::const_allocate(4, 3) as * mut i32; + let _ = intrinsics::const_allocate(4, 3) as *mut i32; //~^ error: evaluation of constant value failed } 1 - } fn main() {} diff --git a/src/test/ui/consts/const-eval/heap/alloc_intrinsic_errors.stderr b/src/test/ui/consts/const-eval/heap/alloc_intrinsic_errors.stderr index 74fb65ca1a6..2628a78455c 100644 --- a/src/test/ui/consts/const-eval/heap/alloc_intrinsic_errors.stderr +++ b/src/test/ui/consts/const-eval/heap/alloc_intrinsic_errors.stderr @@ -4,7 +4,7 @@ error[E0080]: evaluation of constant value failed LL | const FOO: i32 = foo(); | ----- inside `FOO` at $DIR/alloc_intrinsic_errors.rs:6:18 ... -LL | let _ = intrinsics::const_allocate(4, 3) as * mut i32; +LL | let _ = intrinsics::const_allocate(4, 3) as *mut i32; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | | | align has to be a power of 2, `3` is not a power of 2 diff --git a/src/test/ui/consts/const-eval/heap/dealloc_intrinsic.rs b/src/test/ui/consts/const-eval/heap/dealloc_intrinsic.rs index b7c2b752644..aac90cd54cc 100644 --- a/src/test/ui/consts/const-eval/heap/dealloc_intrinsic.rs +++ b/src/test/ui/consts/const-eval/heap/dealloc_intrinsic.rs @@ -1,6 +1,7 @@ // run-pass #![feature(core_intrinsics)] #![feature(const_heap)] +#![feature(const_mut_refs)] use std::intrinsics; @@ -9,4 +10,27 @@ const _X: () = unsafe { intrinsics::const_deallocate(ptr, 4, 4); }; -fn main() {} +const Y: &u32 = unsafe { + let ptr = intrinsics::const_allocate(4, 4) as *mut u32; + *ptr = 42; + &*ptr +}; + +const Z: &u32 = &42; + +const _Z: () = unsafe { + let ptr1 = Y as *const _ as *mut u8; + intrinsics::const_deallocate(ptr1, 4, 4); // nop + intrinsics::const_deallocate(ptr1, 2, 4); // nop + intrinsics::const_deallocate(ptr1, 4, 2); // nop + + let ptr2 = Z as *const _ as *mut u8; + intrinsics::const_deallocate(ptr2, 4, 4); // nop + intrinsics::const_deallocate(ptr2, 2, 4); // nop + intrinsics::const_deallocate(ptr2, 4, 2); // nop +}; + +fn main() { + assert_eq!(*Y, 42); + assert_eq!(*Z, 42); +} |
