Auto merge of #126332 - GuillaumeGomez:rollup-bu1q4pz, r=GuillaumeGomez
Rollup of 9 pull requests Successful merges: - #126039 (Promote `arm64ec-pc-windows-msvc` to tier 2) - #126075 (Remove `DebugWithInfcx` machinery) - #126228 (Provide correct parent for nested anon const) - #126232 (interpret: dyn trait metadata check: equate traits in a proper way) - #126242 (Simplify provider api to improve llvm ir) - #126294 (coverage: Replace the old span refiner with a single function) - #126295 (No uninitalized report in a pre-returned match arm) - #126312 (Update `rustc-perf` submodule) - #126322 (Follow up to splitting core's PanicInfo and std's PanicInfo) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
1d43fbbc73
51 changed files with 561 additions and 851 deletions
|
|
@ -71,6 +71,7 @@ static TARGETS: &[&str] = &[
|
|||
"arm-unknown-linux-gnueabihf",
|
||||
"arm-unknown-linux-musleabi",
|
||||
"arm-unknown-linux-musleabihf",
|
||||
"arm64ec-pc-windows-msvc",
|
||||
"armv5te-unknown-linux-gnueabi",
|
||||
"armv5te-unknown-linux-musleabi",
|
||||
"armv7-linux-androideabi",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
// Validation stops this too early.
|
||||
//@compile-flags: -Zmiri-disable-validation
|
||||
// Validation and SB stop this too early.
|
||||
//@compile-flags: -Zmiri-disable-validation -Zmiri-disable-stacked-borrows
|
||||
|
||||
trait T1 {
|
||||
#[allow(dead_code)]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
#![feature(ptr_metadata)]
|
||||
// This test is the result of minimizing the `emplacable` crate to reproduce
|
||||
// <https://github.com/rust-lang/miri/issues/3541>.
|
||||
|
||||
use std::{ops::FnMut, ptr::Pointee};
|
||||
|
||||
pub type EmplacerFn<'a, T> = dyn for<'b> FnMut(<T as Pointee>::Metadata) + 'a;
|
||||
|
||||
#[repr(transparent)]
|
||||
pub struct Emplacer<'a, T>(EmplacerFn<'a, T>)
|
||||
where
|
||||
T: ?Sized;
|
||||
|
||||
impl<'a, T> Emplacer<'a, T>
|
||||
where
|
||||
T: ?Sized,
|
||||
{
|
||||
pub unsafe fn from_fn<'b>(emplacer_fn: &'b mut EmplacerFn<'a, T>) -> &'b mut Self {
|
||||
// This used to trigger:
|
||||
// constructing invalid value: wrong trait in wide pointer vtable: expected
|
||||
// `std::ops::FnMut(<[std::boxed::Box<i32>] as std::ptr::Pointee>::Metadata)`, but encountered
|
||||
// `std::ops::FnMut<(usize,)>`.
|
||||
unsafe { &mut *((emplacer_fn as *mut EmplacerFn<'a, T>) as *mut Self) }
|
||||
}
|
||||
}
|
||||
|
||||
pub fn box_new_with<T>()
|
||||
where
|
||||
T: ?Sized,
|
||||
{
|
||||
let emplacer_closure = &mut |_meta| {
|
||||
unreachable!();
|
||||
};
|
||||
|
||||
unsafe { Emplacer::<T>::from_fn(emplacer_closure) };
|
||||
}
|
||||
|
||||
fn main() {
|
||||
box_new_with::<[Box<i32>]>();
|
||||
}
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 72daa50ce2350f5a9b5ae6dc3ad6babccd14ec0a
|
||||
Subproject commit c64bb60dd1636922b1ccbb82867bed934a99dbcb
|
||||
Loading…
Add table
Add a link
Reference in a new issue