granite-rust/library/core/tests
Matthias Krüger 454ae9fb8b
Rollup merge of #107954 - RalfJung:tree-borrows-fix, r=m-ou-se
avoid mixing accesses of ptrs derived from a mutable ref and parent ptrs

``@Vanille-N`` is working on a successor for Stacked Borrows. It will mostly accept strictly more code than Stacked Borrows did, with one exception: the following pattern no longer works.
```rust
let mut root = 6u8;
let mref = &mut root;
let ptr = mref as *mut u8;
*ptr = 0; // Write
assert_eq!(root, 0); // Parent Read
*ptr = 0; // Attempted Write
```
This worked in Stacked Borrows kind of by accident: when doing the "parent read", under SB we Disable `mref`, but the raw ptrs derived from it remain usable. The fact that we can still use the "children" of a reference that is no longer usable is quite nasty and leads to some undesirable effects (in particular it is the major blocker for resolving https://github.com/rust-lang/unsafe-code-guidelines/issues/257). So in Tree Borrows we no longer do that; instead, reading from `root` makes `mref` and all its children read-only.

Due to other improvements in Tree Borrows, the entire Miri test suite still passes with this new behavior, and even the entire libcore and liballoc test suite, except for these 2 cases this PR fixes. Both of these involve code where the programmer wrote `&mut` but then used pointers derived from that reference in ways that alias with the parent pointer, which arguably is violating uniqueness. They are fixed by properly using raw pointers throughout.
2023-02-12 22:29:49 +01:00
..
fmt Add tests for rounding of ties during float formatting 2022-10-20 22:09:24 +02:00
hash Test const Hash, fix nits 2022-11-08 17:39:40 +01:00
iter Use associated items of char instead of freestanding items in core::char 2023-01-14 11:58:41 +01:00
num Remove unnecessary &format! 2023-01-21 22:06:42 -05:00
ops Expand the docs for ops::ControlFlow a bit 2021-02-06 22:36:05 -08:00
panic Fix test (location_const_file) 2022-10-08 11:48:53 +00:00
alloc.rs Re-optimize Layout::array 2022-07-13 17:07:41 -07:00
any.rs Update bootstrap cfg 2022-12-28 09:18:43 -05:00
array.rs Stabilize core::array::from_fn 2022-05-20 11:04:13 -03:00
ascii.rs introduce {char, u8}::is_ascii_octdigit 2022-09-27 11:55:13 +05:30
asserting.rs [RFC 2011] Library code 2022-05-22 07:18:32 -03:00
atomic.rs Make use of [wrapping_]byte_{add,sub} 2022-08-23 19:32:37 +04:00
bool.rs Constify bool::then{,_some} 2021-12-15 00:11:23 +08:00
cell.rs Fix Display for cell::{Ref,RefMut} 2022-05-20 11:16:30 -07:00
char.rs char: µoptimise UTF-16 surrogates decoding 2022-12-23 14:15:33 +01:00
clone.rs Use Box::new() instead of box syntax in core tests 2022-05-29 01:44:11 +02:00
cmp.rs Add test for StructuralEq for std::cmp::Ordering. 2022-03-16 14:01:48 -05:00
const_ptr.rs cleanup code w/ pointers in std a little 2022-08-05 16:47:49 +04:00
convert.rs Revert "Auto merge of #89450 - usbalbin:const_try_revert, r=oli-obk" 2021-12-12 12:34:59 +08:00
future.rs add tests 2022-02-02 23:07:02 +09:00
intrinsics.rs Switch bootstrap cfgs 2022-02-25 08:00:52 -05:00
lazy.rs More inference-friendly API for lazy 2022-10-29 09:56:20 +01:00
lib.rs Stabilize ::{core,std}::pin::pin! 2023-01-11 14:09:14 -08:00
macros.rs Allow leading pipe in matches!() patterns. 2021-07-15 22:05:45 +03:00
manually_drop.rs Test ManuallyDrop::clone_from. 2021-07-05 11:55:45 +00:00
mem.rs Update bootstrap cfg 2022-12-28 09:18:43 -05:00
nonzero.rs Make From impls of NonZero integer const. 2021-10-20 12:04:58 +09:00
ops.rs Test not never 2021-11-21 19:10:39 -08:00
option.rs cfg-step code 2022-11-06 17:21:21 -05:00
panic.rs Add newlines 2022-09-27 19:23:52 +00:00
pattern.rs mv std libs to library/ 2020-07-27 19:51:13 -05:00
pin.rs Make some methods of Pin<&mut T> unstable const 2020-09-18 19:23:50 +02:00
pin_macro.rs Write {ui,} tests for pin_macro and pin! 2022-02-14 16:56:37 +01:00
ptr.rs avoid mixing accesses of ptrs derived from a mutable ref and parent ptrs 2023-02-12 15:16:27 +01:00
result.rs Remove unstable Result::into_ok_or_err 2022-08-17 17:20:42 -07:00
simd.rs Introduce core::simd trait imports in tests 2022-07-20 18:08:20 -07:00
slice.rs Remove various double spaces in source comments. 2023-01-14 17:22:04 +01:00
str.rs Update paths in comments. 2022-12-30 14:00:42 +01:00
str_lossy.rs Expose Utf8Lossy as Utf8Chunks 2022-08-20 12:49:20 -04:00
task.rs Remove test of static Context 2023-01-02 10:33:23 -08:00
time.rs add tests for div_duration_* functions 2023-01-07 11:05:33 -07:00
tuple.rs mv std libs to library/ 2020-07-27 19:51:13 -05:00
unicode.rs revert changes to unicode stability 2022-07-08 21:18:15 +00:00
waker.rs libcore tests: avoid int2ptr casts 2022-06-27 13:30:44 -04:00