diff options
| author | bors <bors@rust-lang.org> | 2020-09-14 18:04:18 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-09-14 18:04:18 +0000 |
| commit | bb0067c75ea82efa8a09213bfba0dc2583ac0a4c (patch) | |
| tree | 748acbeb26cf201c4f85b23e2a266bd9f85bbb92 | |
| parent | 57c5f40cf4d7685538f6e3a405612f939e0a5e47 (diff) | |
| parent | 0b5e681f5af0d3989b49121969f09cf29f029263 (diff) | |
| download | rust-bb0067c75ea82efa8a09213bfba0dc2583ac0a4c.tar.gz rust-bb0067c75ea82efa8a09213bfba0dc2583ac0a4c.zip | |
Auto merge of #76278 - jethrogb:jb/sgx-rwlock-init-test, r=Mark-Simulacrum
Improve SGX RWLock initializer test r? `@eddyb` This addresses https://github.com/pnkfelix/rust/pull/1#discussion_r374239895 Fixes https://github.com/fortanix/rust-sgx/issues/213
| -rw-r--r-- | library/std/src/sys/sgx/rwlock/tests.rs | 34 |
1 files changed, 11 insertions, 23 deletions
diff --git a/library/std/src/sys/sgx/rwlock/tests.rs b/library/std/src/sys/sgx/rwlock/tests.rs index 05b36c633f8..17c9e72ee39 100644 --- a/library/std/src/sys/sgx/rwlock/tests.rs +++ b/library/std/src/sys/sgx/rwlock/tests.rs @@ -1,14 +1,12 @@ use super::*; -use crate::mem::{self, MaybeUninit}; -use core::array::FixedSizeArray; -// Verify that the bytes of initialized RWLock are the same as in -// libunwind. If they change, `src/UnwindRustSgx.h` in libunwind needs to -// be changed too. +// Verify that the byte pattern libunwind uses to initialize an RWLock is +// equivalent to the value of RWLock::new(). If the value changes, +// `src/UnwindRustSgx.h` in libunwind needs to be changed too. #[test] fn test_c_rwlock_initializer() { #[rustfmt::skip] - const RWLOCK_INIT: &[u8] = &[ + const C_RWLOCK_INIT: &[u8] = &[ /* 0x00 */ 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* 0x10 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, /* 0x20 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, @@ -20,24 +18,14 @@ fn test_c_rwlock_initializer() { /* 0x80 */ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ]; - #[inline(never)] - fn zero_stack() { - test::black_box(MaybeUninit::<[RWLock; 16]>::zeroed()); - } - - #[inline(never)] - unsafe fn rwlock_new(init: &mut MaybeUninit<RWLock>) { - init.write(RWLock::new()); - } + // For the test to work, we need the padding/unused bytes in RWLock to be + // initialized as 0. In practice, this is the case with statics. + static RUST_RWLOCK_INIT: RWLock = RWLock::new(); unsafe { - // try hard to make sure that the padding/unused bytes in RWLock - // get initialized as 0. If the assertion below fails, that might - // just be an issue with the test code and not with the value of - // RWLOCK_INIT. - zero_stack(); - let mut init = MaybeUninit::<RWLock>::zeroed(); - rwlock_new(&mut init); - assert_eq!(mem::transmute::<_, [u8; 144]>(init.assume_init()).as_slice(), RWLOCK_INIT) + // If the assertion fails, that not necessarily an issue with the value + // of C_RWLOCK_INIT. It might just be an issue with the way padding + // bytes are initialized in the test code. + assert_eq!(&crate::mem::transmute_copy::<_, [u8; 144]>(&RUST_RWLOCK_INIT), C_RWLOCK_INIT); }; } |
