Auto merge of #126793 - saethlin:mono-rawvec, r=scottmcm
Apply "polymorphization at home" to RawVec The idea here is to move all the logic in RawVec into functions with explicit size and alignment parameters. This should eliminate all the fussing about how tweaking RawVec code produces large swings in compile times. This uncovered https://github.com/rust-lang/rust-clippy/issues/12979, so I've modified the relevant test in a way that tries to preserve the spirit of the test without tripping the ICE.
This commit is contained in:
commit
13f8a57cfb
15 changed files with 563 additions and 316 deletions
|
|
@ -10,7 +10,7 @@ use std::sync::Once;
|
|||
|
||||
const ATOMIC: AtomicUsize = AtomicUsize::new(5);
|
||||
const CELL: Cell<usize> = Cell::new(6);
|
||||
const ATOMIC_TUPLE: ([AtomicUsize; 1], Vec<AtomicUsize>, u8) = ([ATOMIC], Vec::new(), 7);
|
||||
const ATOMIC_TUPLE: ([AtomicUsize; 1], Option<Box<AtomicUsize>>, u8) = ([ATOMIC], None, 7);
|
||||
const INTEGER: u8 = 8;
|
||||
const STRING: String = String::new();
|
||||
const STR: &str = "012345";
|
||||
|
|
@ -74,7 +74,6 @@ fn main() {
|
|||
let _ = &(&&&&ATOMIC_TUPLE).0; //~ ERROR: interior mutability
|
||||
let _ = &ATOMIC_TUPLE.0[0]; //~ ERROR: interior mutability
|
||||
let _ = ATOMIC_TUPLE.0[0].load(Ordering::SeqCst); //~ ERROR: interior mutability
|
||||
let _ = &*ATOMIC_TUPLE.1;
|
||||
let _ = &ATOMIC_TUPLE.2;
|
||||
let _ = (&&&&ATOMIC_TUPLE).0;
|
||||
let _ = (&&&&ATOMIC_TUPLE).2;
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ LL | let _ = ATOMIC_TUPLE.0[0].load(Ordering::SeqCst);
|
|||
= help: assign this const to a local or static variable, and use the variable here
|
||||
|
||||
error: a `const` item with interior mutability should not be borrowed
|
||||
--> tests/ui/borrow_interior_mutable_const/others.rs:82:13
|
||||
--> tests/ui/borrow_interior_mutable_const/others.rs:81:13
|
||||
|
|
||||
LL | let _ = ATOMIC_TUPLE.0[0];
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
@ -100,7 +100,7 @@ LL | let _ = ATOMIC_TUPLE.0[0];
|
|||
= help: assign this const to a local or static variable, and use the variable here
|
||||
|
||||
error: a `const` item with interior mutability should not be borrowed
|
||||
--> tests/ui/borrow_interior_mutable_const/others.rs:87:5
|
||||
--> tests/ui/borrow_interior_mutable_const/others.rs:86:5
|
||||
|
|
||||
LL | CELL.set(2);
|
||||
| ^^^^
|
||||
|
|
@ -108,7 +108,7 @@ LL | CELL.set(2);
|
|||
= help: assign this const to a local or static variable, and use the variable here
|
||||
|
||||
error: a `const` item with interior mutability should not be borrowed
|
||||
--> tests/ui/borrow_interior_mutable_const/others.rs:88:16
|
||||
--> tests/ui/borrow_interior_mutable_const/others.rs:87:16
|
||||
|
|
||||
LL | assert_eq!(CELL.get(), 6);
|
||||
| ^^^^
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
// FIXME: This test is broken since https://github.com/rust-lang/rust/pull/126793,
|
||||
// possibly related to the additional struct between Vec and Unique.
|
||||
//@revisions: default uniq
|
||||
// We disable the GC for this test because it would change what is printed.
|
||||
//@compile-flags: -Zmiri-tree-borrows -Zmiri-provenance-gc=0
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@
|
|||
Warning: this tree is indicative only. Some tags may have been hidden.
|
||||
0.. 2
|
||||
| Act | └─┬──<TAG=root of the allocation>
|
||||
|-----| └─┬──<TAG=base.as_ptr(), base.as_ptr()>
|
||||
|-----| └─┬──<TAG=raw_parts.0>
|
||||
|-----| └────<TAG=reconstructed.as_ptr(), reconstructed.as_ptr()>
|
||||
|-----| ├────<TAG=base.as_ptr()>
|
||||
|-----| ├────<TAG=base.as_ptr()>
|
||||
|-----| └─┬──<TAG=raw_parts.0>
|
||||
|-----| ├────<TAG=reconstructed.as_ptr()>
|
||||
|-----| └────<TAG=reconstructed.as_ptr()>
|
||||
──────────────────────────────────────────────────
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue