From 2261154549996eb7737a895e5df5fa894dc03e42 Mon Sep 17 00:00:00 2001 From: kennytm Date: Thu, 10 Jul 2025 18:22:18 +0800 Subject: [PATCH 01/53] core: add Peekable::next_if_map --- library/core/src/iter/adapters/peekable.rs | 102 ++++++++++++++++++ .../coretests/tests/iter/adapters/peekable.rs | 86 +++++++++++++++ library/coretests/tests/lib.rs | 1 + 3 files changed, 189 insertions(+) diff --git a/library/core/src/iter/adapters/peekable.rs b/library/core/src/iter/adapters/peekable.rs index a6522659620a0..a55de75d56c6e 100644 --- a/library/core/src/iter/adapters/peekable.rs +++ b/library/core/src/iter/adapters/peekable.rs @@ -317,6 +317,108 @@ impl Peekable { { self.next_if(|next| next == expected) } + + /// Consumes the next value of this iterator and applies a function `f` on it, + /// returning the result if the closure returns `Ok`. + /// + /// Otherwise if the closure returns `Err` the value is put back for the next iteration. + /// + /// The content of the `Err` variant is typically the original value of the closure, + /// but this is not required. If a different value is returned, + /// the next `peek()` or `next()` call will result in this new value. + /// This is similar to modifying the output of `peek_mut()`. + /// + /// If the closure panics, the next value will always be consumed and dropped + /// even if the panic is caught, because the closure never returned an `Err` value to put back. + /// + /// # Examples + /// + /// Parse the leading decimal number from an iterator of characters. + /// ``` + /// #![feature(peekable_next_if_map)] + /// let mut iter = "125 GOTO 10".chars().peekable(); + /// let mut line_num = 0_u32; + /// while let Some(digit) = iter.next_if_map(|c| c.to_digit(10).ok_or(c)) { + /// line_num = line_num * 10 + digit; + /// } + /// assert_eq!(line_num, 125); + /// assert_eq!(iter.collect::(), " GOTO 10"); + /// ``` + /// + /// Matching custom types. + /// ``` + /// #![feature(peekable_next_if_map)] + /// + /// #[derive(Debug, PartialEq, Eq)] + /// enum Node { + /// Comment(String), + /// Red(String), + /// Green(String), + /// Blue(String), + /// } + /// + /// /// Combines all consecutive `Comment` nodes into a single one. + /// fn combine_comments(nodes: Vec) -> Vec { + /// let mut result = Vec::with_capacity(nodes.len()); + /// let mut iter = nodes.into_iter().peekable(); + /// let mut comment_text = None::; + /// loop { + /// // Typically the closure in .next_if_map() matches on the input, + /// // extracts the desired pattern into an `Ok`, + /// // and puts the rest into an `Err`. + /// while let Some(text) = iter.next_if_map(|node| match node { + /// Node::Comment(text) => Ok(text), + /// other => Err(other), + /// }) { + /// comment_text.get_or_insert_default().push_str(&text); + /// } + /// + /// if let Some(text) = comment_text.take() { + /// result.push(Node::Comment(text)); + /// } + /// if let Some(node) = iter.next() { + /// result.push(node); + /// } else { + /// break; + /// } + /// } + /// result + /// } + ///# assert_eq!( // hiding the test to avoid cluttering the documentation. + ///# combine_comments(vec![ + ///# Node::Comment("The".to_owned()), + ///# Node::Comment("Quick".to_owned()), + ///# Node::Comment("Brown".to_owned()), + ///# Node::Red("Fox".to_owned()), + ///# Node::Green("Jumped".to_owned()), + ///# Node::Comment("Over".to_owned()), + ///# Node::Blue("The".to_owned()), + ///# Node::Comment("Lazy".to_owned()), + ///# Node::Comment("Dog".to_owned()), + ///# ]), + ///# vec![ + ///# Node::Comment("TheQuickBrown".to_owned()), + ///# Node::Red("Fox".to_owned()), + ///# Node::Green("Jumped".to_owned()), + ///# Node::Comment("Over".to_owned()), + ///# Node::Blue("The".to_owned()), + ///# Node::Comment("LazyDog".to_owned()), + ///# ], + ///# ) + /// ``` + #[unstable(feature = "peekable_next_if_map", issue = "143702")] + pub fn next_if_map(&mut self, f: impl FnOnce(I::Item) -> Result) -> Option { + let unpeek = if let Some(item) = self.next() { + match f(item) { + Ok(result) => return Some(result), + Err(item) => Some(item), + } + } else { + None + }; + self.peeked = Some(unpeek); + None + } } #[unstable(feature = "trusted_len", issue = "37572")] diff --git a/library/coretests/tests/iter/adapters/peekable.rs b/library/coretests/tests/iter/adapters/peekable.rs index 7f4341b8902c8..f0549e8d6c2c3 100644 --- a/library/coretests/tests/iter/adapters/peekable.rs +++ b/library/coretests/tests/iter/adapters/peekable.rs @@ -271,3 +271,89 @@ fn test_peekable_non_fused() { assert_eq!(iter.peek(), None); assert_eq!(iter.next_back(), None); } + +#[test] +fn test_peekable_next_if_map_mutation() { + fn collatz((mut num, mut len): (u64, u32)) -> Result { + let jump = num.trailing_zeros(); + num >>= jump; + len += jump; + if num == 1 { Ok(len) } else { Err((3 * num + 1, len + 1)) } + } + + let mut iter = once((3, 0)).peekable(); + assert_eq!(iter.peek(), Some(&(3, 0))); + assert_eq!(iter.next_if_map(collatz), None); + assert_eq!(iter.peek(), Some(&(10, 1))); + assert_eq!(iter.next_if_map(collatz), None); + assert_eq!(iter.peek(), Some(&(16, 3))); + assert_eq!(iter.next_if_map(collatz), Some(7)); + assert_eq!(iter.peek(), None); + assert_eq!(iter.next_if_map(collatz), None); +} + +#[test] +#[cfg_attr(not(panic = "unwind"), ignore = "test requires unwinding support")] +fn test_peekable_next_if_map_panic() { + use core::cell::Cell; + use std::panic::{AssertUnwindSafe, catch_unwind}; + + struct BitsetOnDrop<'a> { + value: u32, + cell: &'a Cell, + } + impl<'a> Drop for BitsetOnDrop<'a> { + fn drop(&mut self) { + self.cell.update(|v| v | self.value); + } + } + + let cell = &Cell::new(0); + let mut it = [ + BitsetOnDrop { value: 1, cell }, + BitsetOnDrop { value: 2, cell }, + BitsetOnDrop { value: 4, cell }, + BitsetOnDrop { value: 8, cell }, + ] + .into_iter() + .peekable(); + + // sanity check, .peek() won't consume the value, .next() will transfer ownership. + let item = it.peek().unwrap(); + assert_eq!(item.value, 1); + assert_eq!(cell.get(), 0); + let item = it.next().unwrap(); + assert_eq!(item.value, 1); + assert_eq!(cell.get(), 0); + drop(item); + assert_eq!(cell.get(), 1); + + // next_if_map returning Ok should transfer the value out. + let item = it.next_if_map(Ok).unwrap(); + assert_eq!(item.value, 2); + assert_eq!(cell.get(), 1); + drop(item); + assert_eq!(cell.get(), 3); + + // next_if_map returning Err should not drop anything. + assert_eq!(it.next_if_map::<()>(Err), None); + assert_eq!(cell.get(), 3); + assert_eq!(it.peek().unwrap().value, 4); + assert_eq!(cell.get(), 3); + + // next_if_map panicking should consume and drop the item. + let result = catch_unwind({ + let mut it = AssertUnwindSafe(&mut it); + move || it.next_if_map::<()>(|_| panic!()) + }); + assert!(result.is_err()); + assert_eq!(cell.get(), 7); + assert_eq!(it.next().unwrap().value, 8); + assert_eq!(cell.get(), 15); + assert!(it.peek().is_none()); + + // next_if_map should *not* execute the closure if the iterator is exhausted. + assert!(it.next_if_map::<()>(|_| panic!()).is_none()); + assert!(it.peek().is_none()); + assert_eq!(cell.get(), 15); +} diff --git a/library/coretests/tests/lib.rs b/library/coretests/tests/lib.rs index fdef736c0c0f7..18e6e96c235f0 100644 --- a/library/coretests/tests/lib.rs +++ b/library/coretests/tests/lib.rs @@ -78,6 +78,7 @@ #![feature(next_index)] #![feature(numfmt)] #![feature(pattern)] +#![feature(peekable_next_if_map)] #![feature(pointer_is_aligned_to)] #![feature(portable_simd)] #![feature(ptr_metadata)] From bbf08d87eb92f618120b6517651588950780b3e4 Mon Sep 17 00:00:00 2001 From: dianne Date: Tue, 12 Aug 2025 23:55:29 -0700 Subject: [PATCH 02/53] add a test with incorrect `if let`-`super let` drop order --- tests/ui/drop/if-let-super-let.rs | 112 ++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 tests/ui/drop/if-let-super-let.rs diff --git a/tests/ui/drop/if-let-super-let.rs b/tests/ui/drop/if-let-super-let.rs new file mode 100644 index 0000000000000..0f966e793a31f --- /dev/null +++ b/tests/ui/drop/if-let-super-let.rs @@ -0,0 +1,112 @@ +//! Test for #145328: ensure the lifetime of a `super let` binding within an `if let` scrutinee is +//! at most the scope of the `if` condition's temporaries. Additionally, test `pin!` since it's +//! implemented in terms of `super let` and exposes this behavior. +//@ run-pass +//@ revisions: e2021 e2024 +//@ [e2021] edition: 2021 +//@ [e2024] edition: 2024 + +#![feature(if_let_guard)] +#![feature(super_let)] +#![expect(irrefutable_let_patterns)] + +use std::cell::RefCell; +use std::pin::pin; + +fn main() { + // The `super let` bindings here should have the same scope as `if let` temporaries. + // In Rust 2021, this means it lives past the end of the `if` expression. + // In Rust 2024, this means it lives to the end of the `if`'s success block. + assert_drop_order(0..=2, |o| { + #[cfg(e2021)] + ( + if let _ = { super let _x = o.log(2); } { o.push(0) }, + o.push(1), + ); + #[cfg(e2024)] + ( + if let _ = { super let _x = o.log(2); } { o.push(0) }, + o.push(1), + ); + }); + assert_drop_order(0..=2, |o| { + #[cfg(e2021)] + ( + if let true = { super let _x = o.log(2); false } {} else { o.push(0) }, + o.push(1), + ); + #[cfg(e2024)] + ( + if let true = { super let _x = o.log(2); false } {} else { o.push(0) }, + o.push(1), + ); + }); + + // `pin!` should behave likewise. + assert_drop_order(0..=2, |o| { + #[cfg(e2021)] (if let _ = pin!(o.log(2)) { o.push(0) }, o.push(1)); + #[cfg(e2024)] (if let _ = pin!(o.log(2)) { o.push(0) }, o.push(1)); + }); + assert_drop_order(0..=2, |o| { + #[cfg(e2021)] + ( + if let None = Some(pin!(o.log(2))) {} else { o.push(0) }, + o.push(1), + ); + #[cfg(e2024)] + ( + if let None = Some(pin!(o.log(2))) {} else { o.push(0) }, + o.push(1), + ); + }); + + // `super let` bindings' scope should also be consistent with `if let` temporaries in guards. + // Here, that means the `super let` binding in the second guard condition operand should be + // dropped before the first operand's temporary. This is consistent across Editions. + assert_drop_order(0..=1, |o| { + match () { + _ if let _ = o.log(0) + && let _ = { super let _x = o.log(1); } => {} + _ => unreachable!(), + } + }); + assert_drop_order(0..=1, |o| { + match () { + _ if let _ = o.log(0) + && let _ = pin!(o.log(1)) => {} + _ => unreachable!(), + } + }); +} + +// # Test scaffolding... + +struct DropOrder(RefCell>); +struct LogDrop<'o>(&'o DropOrder, u64); + +impl DropOrder { + fn log(&self, n: u64) -> LogDrop<'_> { + LogDrop(self, n) + } + fn push(&self, n: u64) { + self.0.borrow_mut().push(n); + } +} + +impl<'o> Drop for LogDrop<'o> { + fn drop(&mut self) { + self.0.push(self.1); + } +} + +#[track_caller] +fn assert_drop_order( + ex: impl IntoIterator, + f: impl Fn(&DropOrder), +) { + let order = DropOrder(RefCell::new(Vec::new())); + f(&order); + let order = order.0.into_inner(); + let expected: Vec = ex.into_iter().collect(); + assert_eq!(order, expected); +} From 8fc3938d9961568dfec38b10506f33fd9bc7c147 Mon Sep 17 00:00:00 2001 From: dianne Date: Wed, 13 Aug 2025 01:02:13 -0700 Subject: [PATCH 03/53] fix scope of `super let` bindings within `if let` They now use the enclosing temporary scope as their scope, regardless of which `ScopeData` was used to mark it. --- .../rustc_hir_analysis/src/check/region.rs | 8 +--- compiler/rustc_middle/src/middle/region.rs | 39 +++++++++++++++++++ compiler/rustc_middle/src/ty/rvalue_scopes.rs | 37 +----------------- tests/ui/drop/if-let-super-let.rs | 22 +++++------ 4 files changed, 54 insertions(+), 52 deletions(-) diff --git a/compiler/rustc_hir_analysis/src/check/region.rs b/compiler/rustc_hir_analysis/src/check/region.rs index f5770b7312ddf..2ba7ed46f92c4 100644 --- a/compiler/rustc_hir_analysis/src/check/region.rs +++ b/compiler/rustc_hir_analysis/src/check/region.rs @@ -490,12 +490,8 @@ fn resolve_local<'tcx>( // // Iterate up to the enclosing destruction scope to find the same scope that will also // be used for the result of the block itself. - while let Some(s) = visitor.cx.var_parent { - let parent = visitor.scope_tree.parent_map.get(&s).cloned(); - if let Some(Scope { data: ScopeData::Destruction, .. }) = parent { - break; - } - visitor.cx.var_parent = parent; + if let Some(inner_scope) = visitor.cx.var_parent { + (visitor.cx.var_parent, _) = visitor.scope_tree.default_temporary_scope(inner_scope) } } } diff --git a/compiler/rustc_middle/src/middle/region.rs b/compiler/rustc_middle/src/middle/region.rs index 857d041224fa9..5367e5edd496a 100644 --- a/compiler/rustc_middle/src/middle/region.rs +++ b/compiler/rustc_middle/src/middle/region.rs @@ -299,4 +299,43 @@ impl ScopeTree { true } + + /// Returns the scope of non-lifetime-extended temporaries within a given scope, as well as + /// whether we've recorded a potential backwards-incompatible change to lint on. + /// Returns `None` when no enclosing temporary scope is found, such as for static items. + pub fn default_temporary_scope(&self, inner: Scope) -> (Option, Option) { + let mut id = inner; + let mut backwards_incompatible = None; + + while let Some(&p) = self.parent_map.get(&id) { + match p.data { + ScopeData::Destruction => { + debug!("temporary_scope({inner:?}) = {id:?} [enclosing]"); + return (Some(id), backwards_incompatible); + } + ScopeData::IfThenRescope | ScopeData::MatchGuard => { + debug!("temporary_scope({inner:?}) = {p:?} [enclosing]"); + return (Some(p), backwards_incompatible); + } + ScopeData::Node + | ScopeData::CallSite + | ScopeData::Arguments + | ScopeData::IfThen + | ScopeData::Remainder(_) => { + // If we haven't already passed through a backwards-incompatible node, + // then check if we are passing through one now and record it if so. + // This is for now only working for cases where a temporary lifetime is + // *shortened*. + if backwards_incompatible.is_none() { + backwards_incompatible = + self.backwards_incompatible_scope.get(&p.local_id).copied(); + } + id = p + } + } + } + + debug!("temporary_scope({inner:?}) = None"); + (None, backwards_incompatible) + } } diff --git a/compiler/rustc_middle/src/ty/rvalue_scopes.rs b/compiler/rustc_middle/src/ty/rvalue_scopes.rs index 7dfe2d280514f..8b92e48ed1a07 100644 --- a/compiler/rustc_middle/src/ty/rvalue_scopes.rs +++ b/compiler/rustc_middle/src/ty/rvalue_scopes.rs @@ -35,41 +35,8 @@ impl RvalueScopes { // if there's one. Static items, for instance, won't // have an enclosing scope, hence no scope will be // returned. - let mut id = Scope { local_id: expr_id, data: ScopeData::Node }; - let mut backwards_incompatible = None; - - while let Some(&p) = region_scope_tree.parent_map.get(&id) { - match p.data { - ScopeData::Destruction => { - debug!("temporary_scope({expr_id:?}) = {id:?} [enclosing]"); - return (Some(id), backwards_incompatible); - } - ScopeData::IfThenRescope | ScopeData::MatchGuard => { - debug!("temporary_scope({expr_id:?}) = {p:?} [enclosing]"); - return (Some(p), backwards_incompatible); - } - ScopeData::Node - | ScopeData::CallSite - | ScopeData::Arguments - | ScopeData::IfThen - | ScopeData::Remainder(_) => { - // If we haven't already passed through a backwards-incompatible node, - // then check if we are passing through one now and record it if so. - // This is for now only working for cases where a temporary lifetime is - // *shortened*. - if backwards_incompatible.is_none() { - backwards_incompatible = region_scope_tree - .backwards_incompatible_scope - .get(&p.local_id) - .copied(); - } - id = p - } - } - } - - debug!("temporary_scope({expr_id:?}) = None"); - (None, backwards_incompatible) + region_scope_tree + .default_temporary_scope(Scope { local_id: expr_id, data: ScopeData::Node }) } /// Make an association between a sub-expression and an extended lifetime diff --git a/tests/ui/drop/if-let-super-let.rs b/tests/ui/drop/if-let-super-let.rs index 0f966e793a31f..c6543e6d3dc97 100644 --- a/tests/ui/drop/if-let-super-let.rs +++ b/tests/ui/drop/if-let-super-let.rs @@ -25,8 +25,8 @@ fn main() { ); #[cfg(e2024)] ( - if let _ = { super let _x = o.log(2); } { o.push(0) }, - o.push(1), + if let _ = { super let _x = o.log(1); } { o.push(0) }, + o.push(2), ); }); assert_drop_order(0..=2, |o| { @@ -37,15 +37,15 @@ fn main() { ); #[cfg(e2024)] ( - if let true = { super let _x = o.log(2); false } {} else { o.push(0) }, - o.push(1), + if let true = { super let _x = o.log(0); false } {} else { o.push(1) }, + o.push(2), ); }); // `pin!` should behave likewise. assert_drop_order(0..=2, |o| { #[cfg(e2021)] (if let _ = pin!(o.log(2)) { o.push(0) }, o.push(1)); - #[cfg(e2024)] (if let _ = pin!(o.log(2)) { o.push(0) }, o.push(1)); + #[cfg(e2024)] (if let _ = pin!(o.log(1)) { o.push(0) }, o.push(2)); }); assert_drop_order(0..=2, |o| { #[cfg(e2021)] @@ -55,8 +55,8 @@ fn main() { ); #[cfg(e2024)] ( - if let None = Some(pin!(o.log(2))) {} else { o.push(0) }, - o.push(1), + if let None = Some(pin!(o.log(0))) {} else { o.push(1) }, + o.push(2), ); }); @@ -65,15 +65,15 @@ fn main() { // dropped before the first operand's temporary. This is consistent across Editions. assert_drop_order(0..=1, |o| { match () { - _ if let _ = o.log(0) - && let _ = { super let _x = o.log(1); } => {} + _ if let _ = o.log(1) + && let _ = { super let _x = o.log(0); } => {} _ => unreachable!(), } }); assert_drop_order(0..=1, |o| { match () { - _ if let _ = o.log(0) - && let _ = pin!(o.log(1)) => {} + _ if let _ = o.log(1) + && let _ = pin!(o.log(0)) => {} _ => unreachable!(), } }); From 52063ae24860bb5cb3abc6f3dd83904bc18a3b0f Mon Sep 17 00:00:00 2001 From: Hanna Kruppe Date: Sun, 10 Aug 2025 11:21:43 +0200 Subject: [PATCH 04/53] stabilize path_add_extension --- library/std/src/path.rs | 8 ++------ library/std/tests/path.rs | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/library/std/src/path.rs b/library/std/src/path.rs index 3b52804d6be40..2af6249f3b989 100644 --- a/library/std/src/path.rs +++ b/library/std/src/path.rs @@ -1575,8 +1575,6 @@ impl PathBuf { /// # Examples /// /// ``` - /// #![feature(path_add_extension)] - /// /// use std::path::{Path, PathBuf}; /// /// let mut p = PathBuf::from("/feel/the"); @@ -1596,7 +1594,7 @@ impl PathBuf { /// p.add_extension(""); /// assert_eq!(Path::new("/feel/the.formatted.dark"), p.as_path()); /// ``` - #[unstable(feature = "path_add_extension", issue = "127292")] + #[stable(feature = "path_add_extension", since = "CURRENT_RUSTC_VERSION")] pub fn add_extension>(&mut self, extension: S) -> bool { self._add_extension(extension.as_ref()) } @@ -2846,8 +2844,6 @@ impl Path { /// # Examples /// /// ``` - /// #![feature(path_add_extension)] - /// /// use std::path::{Path, PathBuf}; /// /// let path = Path::new("foo.rs"); @@ -2858,7 +2854,7 @@ impl Path { /// assert_eq!(path.with_added_extension("xz"), PathBuf::from("foo.tar.gz.xz")); /// assert_eq!(path.with_added_extension("").with_added_extension("txt"), PathBuf::from("foo.tar.gz.txt")); /// ``` - #[unstable(feature = "path_add_extension", issue = "127292")] + #[stable(feature = "path_add_extension", since = "CURRENT_RUSTC_VERSION")] pub fn with_added_extension>(&self, extension: S) -> PathBuf { let mut new_path = self.to_path_buf(); new_path.add_extension(extension); diff --git a/library/std/tests/path.rs b/library/std/tests/path.rs index e1576a0d4231a..3577f0d9c7bb6 100644 --- a/library/std/tests/path.rs +++ b/library/std/tests/path.rs @@ -1,4 +1,4 @@ -#![feature(clone_to_uninit, path_add_extension, maybe_uninit_slice, normalize_lexically)] +#![feature(clone_to_uninit, maybe_uninit_slice, normalize_lexically)] use std::clone::CloneToUninit; use std::ffi::OsStr; From 7d09ce84ee0b9b63e44ec90241ff9e6584068164 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Aug 2025 09:50:54 +0000 Subject: [PATCH 05/53] Bump slab from 0.4.10 to 0.4.11 in /tests/deps Bumps [slab](https://github.com/tokio-rs/slab) from 0.4.10 to 0.4.11. - [Release notes](https://github.com/tokio-rs/slab/releases) - [Changelog](https://github.com/tokio-rs/slab/blob/master/CHANGELOG.md) - [Commits](https://github.com/tokio-rs/slab/compare/v0.4.10...v0.4.11) --- updated-dependencies: - dependency-name: slab dependency-version: 0.4.11 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- src/tools/miri/tests/deps/Cargo.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tools/miri/tests/deps/Cargo.lock b/src/tools/miri/tests/deps/Cargo.lock index 4b783ebdc4eed..65ca4215c6001 100644 --- a/src/tools/miri/tests/deps/Cargo.lock +++ b/src/tools/miri/tests/deps/Cargo.lock @@ -296,9 +296,9 @@ dependencies = [ [[package]] name = "slab" -version = "0.4.10" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" [[package]] name = "socket2" From 07aff76dda8fe022052de2ad7624df7de3306529 Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Thu, 21 Aug 2025 04:53:54 +0000 Subject: [PATCH 06/53] Prepare for merging from rust-lang/rust This updates the rust-version file to 125ff8a788c5d6a66917f499abdc00051afe6886. --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index 59adc572eaa4b..85ce9ed79f431 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -f605b57042ffeb320d7ae44490113a827139b766 +125ff8a788c5d6a66917f499abdc00051afe6886 From f702219ba61d94a50ecb581a4e0ab51dc459e99e Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 21 Aug 2025 16:12:43 +0200 Subject: [PATCH 07/53] update rustc-build-sysroot --- src/tools/miri/cargo-miri/Cargo.lock | 4 ++-- src/tools/miri/cargo-miri/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/tools/miri/cargo-miri/Cargo.lock b/src/tools/miri/cargo-miri/Cargo.lock index b3f5dafab6437..ea9c04a3cb515 100644 --- a/src/tools/miri/cargo-miri/Cargo.lock +++ b/src/tools/miri/cargo-miri/Cargo.lock @@ -429,9 +429,9 @@ dependencies = [ [[package]] name = "rustc-build-sysroot" -version = "0.5.9" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb13874a0e55baf4ac3d49d38206aecb31a55b75d6c4d04fd850b53942c8cc8" +checksum = "dd41ead66a69880951b2f7df3139db401d44451b4da123344d27eaa791b89c95" dependencies = [ "anyhow", "rustc_version", diff --git a/src/tools/miri/cargo-miri/Cargo.toml b/src/tools/miri/cargo-miri/Cargo.toml index 77cb1df8e747f..64b56ea114ecf 100644 --- a/src/tools/miri/cargo-miri/Cargo.toml +++ b/src/tools/miri/cargo-miri/Cargo.toml @@ -18,7 +18,7 @@ directories = "6" rustc_version = "0.4" serde_json = "1.0.40" cargo_metadata = "0.21" -rustc-build-sysroot = "0.5.8" +rustc-build-sysroot = "0.5.10" # Enable some feature flags that dev-dependencies need but dependencies # do not. This makes `./miri install` after `./miri build` faster. From 5c3f317187c86fe06cd40a81b7072323a2f8ec55 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 21 Aug 2025 21:20:28 +0200 Subject: [PATCH 08/53] CI: also test on powerpc --- src/tools/miri/.github/workflows/ci.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/tools/miri/.github/workflows/ci.yml b/src/tools/miri/.github/workflows/ci.yml index 7d79c384f85a3..c0fed96d4e6e3 100644 --- a/src/tools/miri/.github/workflows/ci.yml +++ b/src/tools/miri/.github/workflows/ci.yml @@ -41,6 +41,11 @@ jobs: multiarch: s390x gcc_cross: s390x-linux-gnu qemu: true + - host_target: powerpc64le-unknown-linux-gnu + os: ubuntu-latest + multiarch: ppc64el + gcc_cross: powerpc64le-linux-gnu + qemu: true - host_target: aarch64-apple-darwin os: macos-latest - host_target: i686-pc-windows-msvc From 9f15771d16d14490481e53445f4eb7a49442c52e Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Fri, 22 Aug 2025 04:54:12 +0000 Subject: [PATCH 09/53] Prepare for merging from rust-lang/rust This updates the rust-version file to 8e3710ef31a0b2cdf5a1c2f3929b7735d1e28c20. --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index 85ce9ed79f431..d0757e58bf909 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -125ff8a788c5d6a66917f499abdc00051afe6886 +8e3710ef31a0b2cdf5a1c2f3929b7735d1e28c20 From 5068317842a770371d6fcbca358fdb237bd30865 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Fri, 22 Aug 2025 10:15:57 +0200 Subject: [PATCH 10/53] add some ZST reborrow tests --- .../pass/both_borrows/basic_aliasing_model.rs | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/tools/miri/tests/pass/both_borrows/basic_aliasing_model.rs b/src/tools/miri/tests/pass/both_borrows/basic_aliasing_model.rs index 6a625e597df18..82976326a8df3 100644 --- a/src/tools/miri/tests/pass/both_borrows/basic_aliasing_model.rs +++ b/src/tools/miri/tests/pass/both_borrows/basic_aliasing_model.rs @@ -23,7 +23,8 @@ fn main() { not_unpin_not_protected(); write_does_not_invalidate_all_aliases(); box_into_raw_allows_interior_mutable_alias(); - cell_inside_struct() + cell_inside_struct(); + zst(); } // Make sure that reading from an `&mut` does, like reborrowing to `&`, @@ -287,3 +288,22 @@ fn cell_inside_struct() { // Writing to `field1`, which is reserved, should also be allowed. (*a).field1 = 88; } + +/// ZST reborrows on various kinds of dangling pointers are valid. +fn zst() { + unsafe { + // Integer pointer. + let ptr = ptr::without_provenance_mut::<()>(15); + let _ref = &mut *ptr; + + // Out-of-bounds pointer. + let mut b = Box::new(0u8); + let ptr = (&raw mut *b).wrapping_add(15) as *mut (); + let _ref = &mut *ptr; + + // Deallocated pointer. + let ptr = &raw mut *b as *mut (); + drop(b); + let _ref = &mut *ptr; + } +} From 804b41e949b07e907175b6f0a7f8c74ef5f9f9ee Mon Sep 17 00:00:00 2001 From: Stypox Date: Tue, 12 Aug 2025 22:25:54 +0200 Subject: [PATCH 11/53] Account for time spent tracing, use RDTSC for faster time --- src/tools/miri/src/bin/log/mod.rs | 1 + src/tools/miri/src/bin/log/tracing_chrome.rs | 177 +++++++++-------- .../src/bin/log/tracing_chrome_instant.rs | 183 ++++++++++++++++++ 3 files changed, 283 insertions(+), 78 deletions(-) create mode 100644 src/tools/miri/src/bin/log/tracing_chrome_instant.rs diff --git a/src/tools/miri/src/bin/log/mod.rs b/src/tools/miri/src/bin/log/mod.rs index f3b2fdb5348e0..22f74dd46b540 100644 --- a/src/tools/miri/src/bin/log/mod.rs +++ b/src/tools/miri/src/bin/log/mod.rs @@ -1,2 +1,3 @@ pub mod setup; mod tracing_chrome; +mod tracing_chrome_instant; diff --git a/src/tools/miri/src/bin/log/tracing_chrome.rs b/src/tools/miri/src/bin/log/tracing_chrome.rs index 3379816550cfe..310887a13a5ce 100644 --- a/src/tools/miri/src/bin/log/tracing_chrome.rs +++ b/src/tools/miri/src/bin/log/tracing_chrome.rs @@ -7,12 +7,15 @@ //! (`git log -- path/to/tracing_chrome.rs`), but in summary: //! - the file attributes were changed and `extern crate` was added at the top //! - if a tracing span has a field called "tracing_separate_thread", it will be given a separate -//! span ID even in [TraceStyle::Threaded] mode, to make it appear on a separate line when viewing -//! the trace in . This is the syntax to trigger this behavior: +//! span ID even in [TraceStyle::Threaded] mode, to make it appear on a separate line when viewing +//! the trace in . This is the syntax to trigger this behavior: //! ```rust //! tracing::info_span!("my_span", tracing_separate_thread = tracing::field::Empty, /* ... */) //! ``` -//! - use i64 instead of u64 for the "id" in [ChromeLayer::get_root_id] to be compatible with Perfetto +//! - use i64 instead of u64 for the "id" in [ChromeLayer::get_root_id] to be compatible with +//! Perfetto +//! - use [ChromeLayer::with_elapsed_micros_subtracting_tracing] to make time measurements faster on +//! Linux x86/x86_64 and to subtract time spent tracing from the timestamps in the trace file //! //! Depending on the tracing-chrome crate from crates.io is unfortunately not possible, since it //! depends on `tracing_core` which conflicts with rustc_private's `tracing_core` (meaning it would @@ -50,9 +53,22 @@ use std::{ thread::JoinHandle, }; +use crate::log::tracing_chrome_instant::TracingChromeInstant; + +/// Contains thread-local data for threads that send tracing spans or events. +struct ThreadData { + /// A unique ID for this thread, will populate "tid" field in the output trace file. + tid: usize, + /// A clone of [ChromeLayer::out] to avoid the expensive operation of accessing a mutex + /// every time. This is used to send [Message]s to the thread that saves trace data to file. + out: Sender, + /// The instant in time this thread was started. All events happening on this thread will be + /// saved to the trace file with a timestamp (the "ts" field) measured relative to this instant. + start: TracingChromeInstant, +} + thread_local! { - static OUT: RefCell>> = const { RefCell::new(None) }; - static TID: RefCell> = const { RefCell::new(None) }; + static THREAD_DATA: RefCell> = const { RefCell::new(None) }; } type NameFn = Box) -> String + Send + Sync>; @@ -64,7 +80,6 @@ where S: Subscriber + for<'span> LookupSpan<'span> + Send + Sync, { out: Arc>>, - start: std::time::Instant, max_tid: AtomicUsize, include_args: bool, include_locations: bool, @@ -323,7 +338,6 @@ where { fn new(mut builder: ChromeLayerBuilder) -> (ChromeLayer, FlushGuard) { let (tx, rx) = mpsc::channel(); - OUT.with(|val| val.replace(Some(tx.clone()))); let out_writer = builder .out_writer @@ -443,7 +457,6 @@ where }; let layer = ChromeLayer { out: Arc::new(Mutex::new(tx)), - start: std::time::Instant::now(), max_tid: AtomicUsize::new(0), name_fn: builder.name_fn.take(), cat_fn: builder.cat_fn.take(), @@ -456,22 +469,7 @@ where (layer, guard) } - fn get_tid(&self) -> (usize, bool) { - TID.with(|value| { - let tid = *value.borrow(); - match tid { - Some(tid) => (tid, false), - None => { - let tid = self.max_tid.fetch_add(1, Ordering::SeqCst); - value.replace(Some(tid)); - (tid, true) - } - } - }) - } - - fn get_callsite(&self, data: EventOrSpan) -> Callsite { - let (tid, new_thread) = self.get_tid(); + fn get_callsite(&self, data: EventOrSpan, tid: usize) -> Callsite { let name = self.name_fn.as_ref().map(|name_fn| name_fn(&data)); let target = self.cat_fn.as_ref().map(|cat_fn| cat_fn(&data)); let meta = match data { @@ -502,14 +500,6 @@ where (None, None) }; - if new_thread { - let name = match std::thread::current().name() { - Some(name) => name.to_owned(), - None => tid.to_string(), - }; - self.send_message(Message::NewThread(tid, name)); - } - Callsite { tid, name, @@ -548,31 +538,55 @@ where } } - fn enter_span(&self, span: SpanRef, ts: f64) { - let callsite = self.get_callsite(EventOrSpan::Span(&span)); + fn enter_span(&self, span: SpanRef, ts: f64, tid: usize, out: &Sender) { + let callsite = self.get_callsite(EventOrSpan::Span(&span), tid); let root_id = self.get_root_id(span); - self.send_message(Message::Enter(ts, callsite, root_id)); + let _ignored = out.send(Message::Enter(ts, callsite, root_id)); } - fn exit_span(&self, span: SpanRef, ts: f64) { - let callsite = self.get_callsite(EventOrSpan::Span(&span)); + fn exit_span(&self, span: SpanRef, ts: f64, tid: usize, out: &Sender) { + let callsite = self.get_callsite(EventOrSpan::Span(&span), tid); let root_id = self.get_root_id(span); - self.send_message(Message::Exit(ts, callsite, root_id)); + let _ignored = out.send(Message::Exit(ts, callsite, root_id)); } - fn get_ts(&self) -> f64 { - self.start.elapsed().as_nanos() as f64 / 1000.0 - } + /// Helper function that measures how much time is spent while executing `f` and accounts for it + /// in subsequent calls, with the aim to reduce biases in the data collected by `tracing_chrome` + /// by subtracting the time spent inside tracing functions from the timeline. This makes it so + /// that the time spent inside the `tracing_chrome` functions does not impact the timestamps + /// inside the trace file (i.e. `ts`), even if such functions are slow (e.g. because they need + /// to format arguments on the same thread those arguments are collected on, otherwise memory + /// safety would be broken). + /// + /// `f` is called with the microseconds elapsed since the current thread was started (**not** + /// since the program start!), with the current thread ID (i.e. `tid`), and with a [Sender] that + /// can be used to send a [Message] to the thread that collects [Message]s and saves them to the + /// trace file. + #[inline(always)] + fn with_elapsed_micros_subtracting_tracing(&self, f: impl Fn(f64, usize, &Sender)) { + THREAD_DATA.with(|value| { + let mut thread_data = value.borrow_mut(); + let (ThreadData { tid, out, start }, new_thread) = match thread_data.as_mut() { + Some(thread_data) => (thread_data, false), + None => { + let tid = self.max_tid.fetch_add(1, Ordering::SeqCst); + let out = self.out.lock().unwrap().clone(); + let start = TracingChromeInstant::setup_for_thread_and_start(tid); + *thread_data = Some(ThreadData { tid, out, start }); + (thread_data.as_mut().unwrap(), true) + } + }; - fn send_message(&self, message: Message) { - OUT.with(move |val| { - if val.borrow().is_some() { - let _ignored = val.borrow().as_ref().unwrap().send(message); - } else { - let out = self.out.lock().unwrap().clone(); - let _ignored = out.send(message); - val.replace(Some(out)); - } + start.with_elapsed_micros_subtracting_tracing(|ts| { + if new_thread { + let name = match std::thread::current().name() { + Some(name) => name.to_owned(), + None => tid.to_string(), + }; + let _ignored = out.send(Message::NewThread(*tid, name)); + } + f(ts, *tid, out); + }); }); } } @@ -586,52 +600,58 @@ where return; } - let ts = self.get_ts(); - self.enter_span(ctx.span(id).expect("Span not found."), ts); + self.with_elapsed_micros_subtracting_tracing(|ts, tid, out| { + self.enter_span(ctx.span(id).expect("Span not found."), ts, tid, out); + }); } fn on_record(&self, id: &span::Id, values: &span::Record<'_>, ctx: Context<'_, S>) { if self.include_args { - let span = ctx.span(id).unwrap(); - let mut exts = span.extensions_mut(); + self.with_elapsed_micros_subtracting_tracing(|_, _, _| { + let span = ctx.span(id).unwrap(); + let mut exts = span.extensions_mut(); - let args = exts.get_mut::(); + let args = exts.get_mut::(); - if let Some(args) = args { - let args = Arc::make_mut(&mut args.args); - values.record(&mut JsonVisitor { object: args }); - } + if let Some(args) = args { + let args = Arc::make_mut(&mut args.args); + values.record(&mut JsonVisitor { object: args }); + } + }); } } fn on_event(&self, event: &Event<'_>, _ctx: Context<'_, S>) { - let ts = self.get_ts(); - let callsite = self.get_callsite(EventOrSpan::Event(event)); - self.send_message(Message::Event(ts, callsite)); + self.with_elapsed_micros_subtracting_tracing(|ts, tid, out| { + let callsite = self.get_callsite(EventOrSpan::Event(event), tid); + let _ignored = out.send(Message::Event(ts, callsite)); + }); } fn on_exit(&self, id: &span::Id, ctx: Context<'_, S>) { if let TraceStyle::Async = self.trace_style { return; } - let ts = self.get_ts(); - self.exit_span(ctx.span(id).expect("Span not found."), ts); + self.with_elapsed_micros_subtracting_tracing(|ts, tid, out| { + self.exit_span(ctx.span(id).expect("Span not found."), ts, tid, out); + }); } fn on_new_span(&self, attrs: &span::Attributes<'_>, id: &span::Id, ctx: Context<'_, S>) { - if self.include_args { - let mut args = Object::new(); - attrs.record(&mut JsonVisitor { object: &mut args }); - ctx.span(id).unwrap().extensions_mut().insert(ArgsWrapper { - args: Arc::new(args), - }); - } - if let TraceStyle::Threaded = self.trace_style { - return; - } + self.with_elapsed_micros_subtracting_tracing(|ts, tid, out| { + if self.include_args { + let mut args = Object::new(); + attrs.record(&mut JsonVisitor { object: &mut args }); + ctx.span(id).unwrap().extensions_mut().insert(ArgsWrapper { + args: Arc::new(args), + }); + } + if let TraceStyle::Threaded = self.trace_style { + return; + } - let ts = self.get_ts(); - self.enter_span(ctx.span(id).expect("Span not found."), ts); + self.enter_span(ctx.span(id).expect("Span not found."), ts, tid, out); + }); } fn on_close(&self, id: span::Id, ctx: Context<'_, S>) { @@ -639,8 +659,9 @@ where return; } - let ts = self.get_ts(); - self.exit_span(ctx.span(&id).expect("Span not found."), ts); + self.with_elapsed_micros_subtracting_tracing(|ts, tid, out| { + self.exit_span(ctx.span(&id).expect("Span not found."), ts, tid, out); + }); } } diff --git a/src/tools/miri/src/bin/log/tracing_chrome_instant.rs b/src/tools/miri/src/bin/log/tracing_chrome_instant.rs new file mode 100644 index 0000000000000..f400bc20a7b5d --- /dev/null +++ b/src/tools/miri/src/bin/log/tracing_chrome_instant.rs @@ -0,0 +1,183 @@ +//! Code in this class was in part inspired by +//! . +//! A useful resource is also +//! , +//! although this file does not implement TSC synchronization but insteads pins threads to CPUs, +//! since the former is not reliable (i.e. it might lead to non-monotonic time measurements). +//! Another useful resource for future improvements might be measureme's time measurement utils: +//! . +//! Documentation about how the Linux kernel chooses a clock source can be found here: +//! . +#![cfg(feature = "tracing")] + +/// This alternative `TracingChromeInstant` implementation was made entirely to suit the needs of +/// [crate::log::tracing_chrome], and shouldn't be used for anything else. It featues two functions: +/// - [TracingChromeInstant::setup_for_thread_and_start], which sets up the current thread to do +/// proper time tracking and returns a point in time to use as "t=0", and +/// - [TracingChromeInstant::with_elapsed_micros_subtracting_tracing], which allows +/// obtaining how much time elapsed since [TracingChromeInstant::setup_for_thread_and_start] was +/// called while accounting for (and subtracting) the time spent inside tracing-related functions. +/// +/// This measures time using [std::time::Instant], except for x86/x86_64 Linux machines, where +/// [std::time::Instant] is too slow (~1.5us) and thus `rdtsc` is used instead (~5ns). +pub enum TracingChromeInstant { + WallTime { + /// The time at which this instant was created, shifted forward to account + /// for time spent in tracing functions as explained in + /// [TracingChromeInstant::with_elapsed_micros_subtracting_tracing]'s comments. + start_instant: std::time::Instant, + }, + #[cfg(all(target_os = "linux", any(target_arch = "x86", target_arch = "x86_64")))] + Tsc { + /// The value in the TSC counter when this instant was created, shifted forward to account + /// for time spent in tracing functions as explained in + /// [TracingChromeInstant::with_elapsed_micros_subtracting_tracing]'s comments. + start_tsc: u64, + /// The period of the TSC counter in microseconds. + tsc_to_microseconds: f64, + }, +} + +impl TracingChromeInstant { + /// Can be thought of as the same as [std::time::Instant::now()], but also does some setup to + /// make TSC stable in case TSC is available. This is supposed to be called (at most) once per + /// thread since the thread setup takes a few milliseconds. + /// + /// WARNING: If TSC is available, `incremental_thread_id` is used to pick to which CPU to pin + /// the current thread. Thread IDs should be assigned contiguously starting from 0. Be aware + /// that the current thread will be restricted to one CPU for the rest of the execution! + pub fn setup_for_thread_and_start(incremental_thread_id: usize) -> TracingChromeInstant { + #[cfg(all(target_os = "linux", any(target_arch = "x86", target_arch = "x86_64")))] + if *tsc::IS_TSC_AVAILABLE.get_or_init(tsc::is_tsc_available) { + // We need to lock this thread to a specific CPU, because CPUs' TSC timers might be out + // of sync. + tsc::set_cpu_affinity(incremental_thread_id); + + // Can only use tsc_to_microseconds() and rdtsc() after having set the CPU affinity! + // We compute tsc_to_microseconds anew for every new thread just in case some CPU core + // has a different TSC frequency. + let tsc_to_microseconds = tsc::tsc_to_microseconds(); + let start_tsc = tsc::rdtsc(); + return TracingChromeInstant::Tsc { start_tsc, tsc_to_microseconds }; + } + + let _ = incremental_thread_id; // otherwise we get a warning when the TSC branch is disabled + TracingChromeInstant::WallTime { start_instant: std::time::Instant::now() } + } + + /// Calls `f` with the time elapsed in microseconds since this [TracingChromeInstant] was built + /// by [TracingChromeInstant::setup_for_thread_and_start], while subtracting all time previously + /// spent executing other `f`s passed to this function. This behavior allows subtracting time + /// spent in functions that log tracing data (which `f` is supposed to be) from the tracing time + /// measurements. + /// + /// Note: microseconds are used as the time unit since that's what Chrome trace files should + /// contain, see the definition of the "ts" field in + /// . + #[inline(always)] + pub fn with_elapsed_micros_subtracting_tracing(&mut self, f: impl Fn(f64)) { + match self { + TracingChromeInstant::WallTime { start_instant } => { + // Obtain the current time (before executing `f`). + let instant_before_f = std::time::Instant::now(); + + // Using the current time (`instant_before_f`) and the `start_instant` stored in + // `self`, calculate the elapsed time (in microseconds) since this instant was + // instantiated, accounting for any time that was previously spent executing `f`. + // The "accounting" part is not computed in this line, but is rather done by + // shifting forward the `start_instant` down below. + let ts = (instant_before_f - *start_instant).as_nanos() as f64 / 1000.0; + + // Run the function (supposedly a function internal to the tracing infrastructure). + f(ts); + + // Measure how much time was spent executing `f` and shift `start_instant` forward + // by that amount. This "removes" that time from the trace. + *start_instant += std::time::Instant::now() - instant_before_f; + } + + #[cfg(all(target_os = "linux", any(target_arch = "x86", target_arch = "x86_64")))] + TracingChromeInstant::Tsc { start_tsc, tsc_to_microseconds } => { + // the comments above also apply here, since it's the same logic + let tsc_before_f = tsc::rdtsc(); + let ts = ((tsc_before_f - *start_tsc) as f64) * (*tsc_to_microseconds); + f(ts); + *start_tsc += tsc::rdtsc() - tsc_before_f; + } + } + } +} + +#[cfg(all(target_os = "linux", any(target_arch = "x86", target_arch = "x86_64")))] +mod tsc { + + pub static IS_TSC_AVAILABLE: std::sync::OnceLock = std::sync::OnceLock::new(); + + /// Reads the timestamp-counter register. Will give monotonic answers only when called from the + /// same thread, because the TSC of different CPUs might be out of sync. + #[inline(always)] + pub(super) fn rdtsc() -> u64 { + #[cfg(target_arch = "x86")] + use core::arch::x86::_rdtsc; + #[cfg(target_arch = "x86_64")] + use core::arch::x86_64::_rdtsc; + + unsafe { _rdtsc() } + } + + /// Estimates the frequency of the TSC counter by waiting 10ms in a busy loop and + /// looking at how much the TSC increased in the meantime. + pub(super) fn tsc_to_microseconds() -> f64 { + const BUSY_WAIT: std::time::Duration = std::time::Duration::from_millis(10); + let tsc_start = rdtsc(); + let instant_start = std::time::Instant::now(); + while instant_start.elapsed() < BUSY_WAIT { + // `thread::sleep()` is not very precise at waking up the program at the right time, + // so use a busy loop instead. + core::hint::spin_loop(); + } + let tsc_end = rdtsc(); + (BUSY_WAIT.as_nanos() as f64) / 1000.0 / ((tsc_end - tsc_start) as f64) + } + + /// Checks whether the TSC counter is available and runs at a constant rate independently + /// of CPU frequency even across different power states of the CPU (i.e. checks for the + /// `invariant_tsc` CPUID flag). + pub(super) fn is_tsc_available() -> bool { + #[cfg(target_arch = "x86")] + use core::arch::x86::__cpuid; + #[cfg(target_arch = "x86_64")] + use core::arch::x86_64::__cpuid; + + // implemented like https://docs.rs/raw-cpuid/latest/src/raw_cpuid/extended.rs.html#965-967 + const LEAF: u32 = 0x80000007; // this is the leaf for "advanced power management info" + let cpuid = unsafe { __cpuid(LEAF) }; + (cpuid.edx & (1 << 8)) != 0 // EDX bit 8 indicates invariant TSC + } + + /// Forces the current thread to run on a single CPU, which ensures the TSC counter is monotonic + /// (since TSCs of different CPUs might be out-of-sync). `incremental_thread_id` is used to pick + /// to which CPU to pin the current thread, and should be an incremental number that starts from + /// 0. + pub(super) fn set_cpu_affinity(incremental_thread_id: usize) { + let cpu_id = match std::thread::available_parallelism() { + Ok(available_parallelism) => incremental_thread_id % available_parallelism, + _ => panic!("Could not determine CPU count to properly set CPU affinity"), + }; + + let mut set = unsafe { std::mem::zeroed::() }; + unsafe { libc::CPU_SET(cpu_id, &mut set) }; + + // Set the current thread's core affinity. + if unsafe { + libc::sched_setaffinity( + 0, // Defaults to current thread + size_of::(), + &set as *const _, + ) + } != 0 + { + panic!("Could not set CPU affinity") + } + } +} From c68450a473e0d6895b8372c38b38591b9baa7472 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sat, 23 Aug 2025 22:00:57 +0200 Subject: [PATCH 12/53] tree borrows: refactor new-permission logic --- .../src/borrow_tracker/tree_borrows/mod.rs | 149 +++++++----------- .../src/borrow_tracker/tree_borrows/perms.rs | 17 +- .../borrow_tracker/tree_borrows/tree/tests.rs | 2 +- .../frozen-lazy-write-to-surrounding.rs | 9 ++ .../frozen-lazy-write-to-surrounding.stderr | 21 +++ .../cell-lazy-write-to-surrounding.rs | 10 +- 6 files changed, 98 insertions(+), 110 deletions(-) create mode 100644 src/tools/miri/tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.rs create mode 100644 src/tools/miri/tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.stderr diff --git a/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs b/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs index ad2a67160f484..a365044862862 100644 --- a/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs +++ b/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs @@ -125,81 +125,64 @@ pub struct NewPermission { /// Whether a read access should be performed on the non-frozen /// part on a retag. nonfreeze_access: bool, + /// Permission for memory outside the range. + outside_perm: Permission, /// Whether this pointer is part of the arguments of a function call. /// `protector` is `Some(_)` for all pointers marked `noalias`. protector: Option, } impl<'tcx> NewPermission { - /// Determine NewPermission of the reference from the type of the pointee. - fn from_ref_ty( + /// Determine NewPermission of the reference/Box from the type of the pointee. + /// + /// A `ref_mutability` of `None` indicates a `Box` type. + fn new( pointee: Ty<'tcx>, - mutability: Mutability, - kind: RetagKind, + ref_mutability: Option, + retag_kind: RetagKind, cx: &crate::MiriInterpCx<'tcx>, ) -> Option { let ty_is_unpin = pointee.is_unpin(*cx.tcx, cx.typing_env()); - let is_protected = kind == RetagKind::FnEntry; - let protector = is_protected.then_some(ProtectorKind::StrongProtector); - - Some(match mutability { - Mutability::Mut if ty_is_unpin => - NewPermission { - freeze_perm: Permission::new_reserved( - /* ty_is_freeze */ true, - is_protected, - ), - freeze_access: true, - nonfreeze_perm: Permission::new_reserved( - /* ty_is_freeze */ false, - is_protected, - ), - // If we have a mutable reference, then the non-frozen part will - // have state `ReservedIM` or `Reserved`, which can have an initial read access - // performed on it because you cannot have multiple mutable borrows. - nonfreeze_access: true, - protector, - }, - Mutability::Not => - NewPermission { - freeze_perm: Permission::new_frozen(), - freeze_access: true, - nonfreeze_perm: Permission::new_cell(), - // If it is a shared reference, then the non-frozen - // part will have state `Cell`, which should not have an initial access, - // as this can cause data races when using thread-safe data types like - // `Mutex`. - nonfreeze_access: false, - protector, - }, - _ => return None, - }) - } + let ty_is_freeze = pointee.is_freeze(*cx.tcx, cx.typing_env()); + let is_protected = retag_kind == RetagKind::FnEntry; - /// Compute permission for `Box`-like type (`Box` always, and also `Unique` if enabled). - /// These pointers allow deallocation so need a different kind of protector not handled - /// by `from_ref_ty`. - fn from_unique_ty( - ty: Ty<'tcx>, - kind: RetagKind, - cx: &crate::MiriInterpCx<'tcx>, - ) -> Option { - let pointee = ty.builtin_deref(true).unwrap(); - pointee.is_unpin(*cx.tcx, cx.typing_env()).then_some(()).map(|()| { - // Regular `Unpin` box, give it `noalias` but only a weak protector - // because it is valid to deallocate it within the function. - let is_protected = kind == RetagKind::FnEntry; - let protector = is_protected.then_some(ProtectorKind::WeakProtector); - NewPermission { - freeze_perm: Permission::new_reserved(/* ty_is_freeze */ true, is_protected), - freeze_access: true, - nonfreeze_perm: Permission::new_reserved( - /* ty_is_freeze */ false, - is_protected, - ), - nonfreeze_access: true, - protector, - } + if matches!(ref_mutability, Some(Mutability::Mut) | None if !ty_is_unpin) { + // Mutable reference / Box to pinning type: retagging is a NOP. + // FIXME: with `UnsafePinned`, this should do proper per-byte tracking. + return None; + } + + let freeze_perm = match ref_mutability { + // Shared references are frozen. + Some(Mutability::Not) => Permission::new_frozen(), + // Mutable references and Boxes are reserved. + _ => Permission::new_reserved_frz(), + }; + let nonfreeze_perm = match ref_mutability { + // Shared references are "transparent". + Some(Mutability::Not) => Permission::new_cell(), + // *Protected* mutable references and boxes are reserved without regarding for interior mutability. + _ if is_protected => Permission::new_reserved_frz(), + // Unprotected mutable references and boxes start in `ReservedIm`. + _ => Permission::new_reserved_im(), + }; + + // Everything except for `Cell` gets an initial access. + let initial_access = |perm: &Permission| !perm.is_cell(); + + Some(NewPermission { + freeze_perm, + freeze_access: initial_access(&freeze_perm), + nonfreeze_perm, + nonfreeze_access: initial_access(&nonfreeze_perm), + outside_perm: if ty_is_freeze { freeze_perm } else { nonfreeze_perm }, + protector: is_protected.then_some(if ref_mutability.is_some() { + // Strong protector for references + ProtectorKind::StrongProtector + } else { + // Weak protector for boxes + ProtectorKind::WeakProtector + }), }) } } @@ -313,15 +296,11 @@ trait EvalContextPrivExt<'tcx>: crate::MiriInterpCxExt<'tcx> { let span = this.machine.current_span(); - // Store initial permissions and their corresponding range. + // Store initial permissions for the "inside" part. let mut perms_map: DedupRangeMap = DedupRangeMap::new( ptr_size, LocationState::new_accessed(Permission::new_disabled(), IdempotentForeignAccess::None), // this will be overwritten ); - // Keep track of whether the node has any part that allows for interior mutability. - // FIXME: This misses `PhantomData>` which could be considered a marker - // for requesting interior mutability. - let mut has_unsafe_cell = false; // When adding a new node, the SIFA of its parents needs to be updated, potentially across // the entire memory range. For the parts that are being accessed below, the access itself @@ -350,14 +329,13 @@ trait EvalContextPrivExt<'tcx>: crate::MiriInterpCxExt<'tcx> { .get_tree_borrows_params() .precise_interior_mut; - let default_perm = if !precise_interior_mut { - // NOTE: Using `ty_is_freeze` doesn't give the same result as going through the range - // and computing `has_unsafe_cell`. This is because of zero-sized `UnsafeCell`, for which - // `has_unsafe_cell` is false, but `!ty_is_freeze` is true. + // Set "inside" permissions. + if !precise_interior_mut { let ty_is_freeze = place.layout.ty.is_freeze(*this.tcx, this.typing_env()); let (perm, access) = if ty_is_freeze { (new_perm.freeze_perm, new_perm.freeze_access) } else { + // Just pretend the entire thing is an `UnsafeCell`. (new_perm.nonfreeze_perm, new_perm.nonfreeze_access) }; let sifa = perm.strongest_idempotent_foreign_access(protected); @@ -370,12 +348,8 @@ trait EvalContextPrivExt<'tcx>: crate::MiriInterpCxExt<'tcx> { for (_loc_range, loc) in perms_map.iter_mut_all() { *loc = new_loc; } - - perm } else { this.visit_freeze_sensitive(place, ptr_size, |range, frozen| { - has_unsafe_cell = has_unsafe_cell || !frozen; - // We are only ever `Frozen` inside the frozen bits. let (perm, access) = if frozen { (new_perm.freeze_perm, new_perm.freeze_access) @@ -401,9 +375,6 @@ trait EvalContextPrivExt<'tcx>: crate::MiriInterpCxExt<'tcx> { interp_ok(()) })?; - - // Allow lazily writing to surrounding data if we found an `UnsafeCell`. - if has_unsafe_cell { new_perm.nonfreeze_perm } else { new_perm.freeze_perm } }; let alloc_extra = this.get_alloc_extra(alloc_id)?; @@ -447,7 +418,7 @@ trait EvalContextPrivExt<'tcx>: crate::MiriInterpCxExt<'tcx> { orig_tag, new_tag, perms_map, - default_perm, + new_perm.outside_perm, protected, span, )?; @@ -514,7 +485,7 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> { let this = self.eval_context_mut(); let new_perm = match val.layout.ty.kind() { &ty::Ref(_, pointee, mutability) => - NewPermission::from_ref_ty(pointee, mutability, kind, this), + NewPermission::new(pointee, Some(mutability), kind, this), _ => None, }; if let Some(new_perm) = new_perm { @@ -571,8 +542,9 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> { fn visit_box(&mut self, box_ty: Ty<'tcx>, place: &PlaceTy<'tcx>) -> InterpResult<'tcx> { // Only boxes for the global allocator get any special treatment. if box_ty.is_box_global(*self.ecx.tcx) { + let pointee = place.layout.ty.builtin_deref(true).unwrap(); let new_perm = - NewPermission::from_unique_ty(place.layout.ty, self.kind, self.ecx); + NewPermission::new(pointee, /* not a ref */ None, self.kind, self.ecx); self.retag_ptr_inplace(place, new_perm)?; } interp_ok(()) @@ -591,7 +563,7 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> { match place.layout.ty.kind() { &ty::Ref(_, pointee, mutability) => { let new_perm = - NewPermission::from_ref_ty(pointee, mutability, self.kind, self.ecx); + NewPermission::new(pointee, Some(mutability), self.kind, self.ecx); self.retag_ptr_inplace(place, new_perm)?; } ty::RawPtr(_, _) => { @@ -643,14 +615,11 @@ pub trait EvalContextExt<'tcx>: crate::MiriInterpCxExt<'tcx> { // never be ReservedIM, the value of the `ty_is_freeze` // argument doesn't matter // (`ty_is_freeze || true` in `new_reserved` will always be `true`). - freeze_perm: Permission::new_reserved( - /* ty_is_freeze */ true, /* protected */ true, - ), + freeze_perm: Permission::new_reserved_frz(), freeze_access: true, - nonfreeze_perm: Permission::new_reserved( - /* ty_is_freeze */ false, /* protected */ true, - ), + nonfreeze_perm: Permission::new_reserved_frz(), nonfreeze_access: true, + outside_perm: Permission::new_reserved_frz(), protector: Some(ProtectorKind::StrongProtector), }; this.tb_retag_place(place, new_perm) diff --git a/src/tools/miri/src/borrow_tracker/tree_borrows/perms.rs b/src/tools/miri/src/borrow_tracker/tree_borrows/perms.rs index 38863ca0734a1..390435e58d173 100644 --- a/src/tools/miri/src/borrow_tracker/tree_borrows/perms.rs +++ b/src/tools/miri/src/borrow_tracker/tree_borrows/perms.rs @@ -272,28 +272,15 @@ impl Permission { /// Default initial permission of a reborrowed mutable reference that is either /// protected or not interior mutable. - fn new_reserved_frz() -> Self { + pub fn new_reserved_frz() -> Self { Self { inner: ReservedFrz { conflicted: false } } } /// Default initial permission of an unprotected interior mutable reference. - fn new_reserved_im() -> Self { + pub fn new_reserved_im() -> Self { Self { inner: ReservedIM } } - /// Wrapper around `new_reserved_frz` and `new_reserved_im` that decides - /// which to call based on the interior mutability and the retag kind (whether there - /// is a protector is relevant because being protected takes priority over being - /// interior mutable) - pub fn new_reserved(ty_is_freeze: bool, protected: bool) -> Self { - // As demonstrated by `tests/fail/tree_borrows/reservedim_spurious_write.rs`, - // interior mutability and protectors interact poorly. - // To eliminate the case of Protected Reserved IM we override interior mutability - // in the case of a protected reference: protected references are always considered - // "freeze" in their reservation phase. - if ty_is_freeze || protected { Self::new_reserved_frz() } else { Self::new_reserved_im() } - } - /// Default initial permission of a reborrowed shared reference. pub fn new_frozen() -> Self { Self { inner: Frozen } diff --git a/src/tools/miri/src/borrow_tracker/tree_borrows/tree/tests.rs b/src/tools/miri/src/borrow_tracker/tree_borrows/tree/tests.rs index bb3fc2d80b3fa..d9b3696e4f805 100644 --- a/src/tools/miri/src/borrow_tracker/tree_borrows/tree/tests.rs +++ b/src/tools/miri/src/borrow_tracker/tree_borrows/tree/tests.rs @@ -610,7 +610,7 @@ mod spurious_read { }, y: LocStateProt { state: LocationState::new_non_accessed( - Permission::new_reserved(/* freeze */ true, /* protected */ true), + Permission::new_reserved_frz(), IdempotentForeignAccess::default(), ), prot: true, diff --git a/src/tools/miri/tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.rs b/src/tools/miri/tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.rs new file mode 100644 index 0000000000000..7d51050f32b28 --- /dev/null +++ b/src/tools/miri/tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.rs @@ -0,0 +1,9 @@ +//@compile-flags: -Zmiri-tree-borrows + +fn main() { + // Since the "inside" part is `!Freeze`, the permission to mutate is gone. + let pair = ((), 1); + let x = &pair.0; + let ptr = (&raw const *x).cast::().cast_mut(); + unsafe { ptr.write(0) }; //~ERROR: /write access .* forbidden/ +} diff --git a/src/tools/miri/tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.stderr b/src/tools/miri/tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.stderr new file mode 100644 index 0000000000000..e9800468c57a5 --- /dev/null +++ b/src/tools/miri/tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.stderr @@ -0,0 +1,21 @@ +error: Undefined Behavior: write access through at ALLOC[0x0] is forbidden + --> tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.rs:LL:CC + | +LL | unsafe { ptr.write(0) }; + | ^^^^^^^^^^^^ Undefined Behavior occurred here + | + = help: this indicates a potential bug in the program: it performed an invalid operation, but the Tree Borrows rules it violated are still experimental + = help: see https://github.com/rust-lang/unsafe-code-guidelines/blob/master/wip/tree-borrows.md for further information + = help: the accessed tag has state Frozen which forbids this child write access +help: the accessed tag was created here, in the initial state Frozen + --> tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.rs:LL:CC + | +LL | let x = &pair.0; + | ^^^^^^^ + = note: BACKTRACE (of the first span): + = note: inside `main` at tests/fail/tree_borrows/frozen-lazy-write-to-surrounding.rs:LL:CC + +note: some details are omitted, run with `MIRIFLAGS=-Zmiri-backtrace=full` for a verbose backtrace + +error: aborting due to 1 previous error + diff --git a/src/tools/miri/tests/pass/tree_borrows/cell-lazy-write-to-surrounding.rs b/src/tools/miri/tests/pass/tree_borrows/cell-lazy-write-to-surrounding.rs index abe08f2cd2261..7352784ac7a5e 100644 --- a/src/tools/miri/tests/pass/tree_borrows/cell-lazy-write-to-surrounding.rs +++ b/src/tools/miri/tests/pass/tree_borrows/cell-lazy-write-to-surrounding.rs @@ -14,9 +14,11 @@ fn main() { foo(&arr[0]); let pair = (Cell::new(1), 1); - // TODO: Ideally, this would result in UB since the second element - // in `pair` is Frozen. We would need some way to express a - // "shared reference with permission to access surrounding - // interior mutable data". foo(&pair.0); + + // As long as the "inside" part is `!Freeze`, the permission to mutate the "outside" is preserved. + let pair = (Cell::new(()), 1); + let x = &pair.0; + let ptr = (&raw const *x).cast::().cast_mut(); + unsafe { ptr.write(0) }; } From 416f988fafe11841095aab78c29a4a0101c12c84 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sat, 23 Aug 2025 22:08:41 +0200 Subject: [PATCH 13/53] refactor tb_rebor: reduce code duplication --- .../src/borrow_tracker/tree_borrows/mod.rs | 60 +++++++------------ 1 file changed, 22 insertions(+), 38 deletions(-) diff --git a/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs b/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs index a365044862862..04b951cd77c38 100644 --- a/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs +++ b/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs @@ -296,12 +296,6 @@ trait EvalContextPrivExt<'tcx>: crate::MiriInterpCxExt<'tcx> { let span = this.machine.current_span(); - // Store initial permissions for the "inside" part. - let mut perms_map: DedupRangeMap = DedupRangeMap::new( - ptr_size, - LocationState::new_accessed(Permission::new_disabled(), IdempotentForeignAccess::None), // this will be overwritten - ); - // When adding a new node, the SIFA of its parents needs to be updated, potentially across // the entire memory range. For the parts that are being accessed below, the access itself // trivially takes care of that. However, we have to do some more work to also deal with @@ -329,58 +323,48 @@ trait EvalContextPrivExt<'tcx>: crate::MiriInterpCxExt<'tcx> { .get_tree_borrows_params() .precise_interior_mut; - // Set "inside" permissions. - if !precise_interior_mut { - let ty_is_freeze = place.layout.ty.is_freeze(*this.tcx, this.typing_env()); - let (perm, access) = if ty_is_freeze { + // Compute initial "inside" permissions. + let loc_state = |frozen: bool| -> LocationState { + let (perm, access) = if frozen { (new_perm.freeze_perm, new_perm.freeze_access) } else { - // Just pretend the entire thing is an `UnsafeCell`. (new_perm.nonfreeze_perm, new_perm.nonfreeze_access) }; let sifa = perm.strongest_idempotent_foreign_access(protected); - let new_loc = if access { + if access { LocationState::new_accessed(perm, sifa) } else { LocationState::new_non_accessed(perm, sifa) - }; - - for (_loc_range, loc) in perms_map.iter_mut_all() { - *loc = new_loc; } + }; + let perms_map = if !precise_interior_mut { + // For `!Freeze` types, just pretend the entire thing is an `UnsafeCell`. + let ty_is_freeze = place.layout.ty.is_freeze(*this.tcx, this.typing_env()); + let state = loc_state(ty_is_freeze); + DedupRangeMap::new(ptr_size, state) } else { + // The initial state will be overwritten by the visitor below. + let mut perms_map: DedupRangeMap = DedupRangeMap::new( + ptr_size, + LocationState::new_accessed( + Permission::new_disabled(), + IdempotentForeignAccess::None, + ), + ); this.visit_freeze_sensitive(place, ptr_size, |range, frozen| { - // We are only ever `Frozen` inside the frozen bits. - let (perm, access) = if frozen { - (new_perm.freeze_perm, new_perm.freeze_access) - } else { - (new_perm.nonfreeze_perm, new_perm.nonfreeze_access) - }; - let sifa = perm.strongest_idempotent_foreign_access(protected); - // NOTE: Currently, `access` is false if and only if `perm` is Cell, so this `if` - // doesn't not change whether any code is UB or not. We could just always use - // `new_accessed` and everything would stay the same. But that seems conceptually - // odd, so we keep the initial "accessed" bit of the `LocationState` in sync with whether - // a read access is performed below. - let new_loc = if access { - LocationState::new_accessed(perm, sifa) - } else { - LocationState::new_non_accessed(perm, sifa) - }; - - // Store initial permissions. + let state = loc_state(frozen); for (_loc_range, loc) in perms_map.iter_mut(range.start, range.size) { - *loc = new_loc; + *loc = state; } - interp_ok(()) })?; + perms_map }; let alloc_extra = this.get_alloc_extra(alloc_id)?; let mut tree_borrows = alloc_extra.borrow_tracker_tb().borrow_mut(); - for (perm_range, perm) in perms_map.iter_mut_all() { + for (perm_range, perm) in perms_map.iter_all() { if perm.is_accessed() { // Some reborrows incur a read access to the parent. // Adjust range to be relative to allocation start (rather than to `place`). From 8c2d2c07ff7af6e9d10e00833d8e82a483f2acae Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Sun, 24 Aug 2025 04:54:24 +0000 Subject: [PATCH 14/53] Prepare for merging from rust-lang/rust This updates the rust-version file to f6d23413c399fb530be362ebcf25a4e788e16137. --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index d0757e58bf909..3450f18334a75 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -8e3710ef31a0b2cdf5a1c2f3929b7735d1e28c20 +f6d23413c399fb530be362ebcf25a4e788e16137 From 9e18b7b0e1b014833ec49a10fc3544d400ca1acc Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Sun, 24 Aug 2025 05:02:39 +0000 Subject: [PATCH 15/53] fmt --- src/tools/miri/src/machine.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tools/miri/src/machine.rs b/src/tools/miri/src/machine.rs index 0b2ce90041477..0136de5521634 100644 --- a/src/tools/miri/src/machine.rs +++ b/src/tools/miri/src/machine.rs @@ -1077,7 +1077,8 @@ impl<'tcx> Machine<'tcx> for MiriMachine<'tcx> { .target_features .iter() .filter(|&feature| { - feature.kind != TargetFeatureKind::Implied && !ecx.tcx.sess.target_features.contains(&feature.name) + feature.kind != TargetFeatureKind::Implied + && !ecx.tcx.sess.target_features.contains(&feature.name) }) .fold(String::new(), |mut s, feature| { if !s.is_empty() { From 22ef90c8049cf8f07ce42e09f01ca791b829594e Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Mon, 25 Aug 2025 04:55:35 +0000 Subject: [PATCH 16/53] Prepare for merging from rust-lang/rust This updates the rust-version file to a1dbb443527bd126452875eb5d5860c1d001d761. --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index 3450f18334a75..f412399cc8c39 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -f6d23413c399fb530be362ebcf25a4e788e16137 +a1dbb443527bd126452875eb5d5860c1d001d761 From b08ebc5b204af82c1687f27047370209653c7983 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Mon, 25 Aug 2025 12:47:29 +0200 Subject: [PATCH 17/53] TB: fix SIFA comment --- .../src/borrow_tracker/tree_borrows/mod.rs | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs b/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs index 04b951cd77c38..bed65440dc9aa 100644 --- a/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs +++ b/src/tools/miri/src/borrow_tracker/tree_borrows/mod.rs @@ -298,18 +298,18 @@ trait EvalContextPrivExt<'tcx>: crate::MiriInterpCxExt<'tcx> { // When adding a new node, the SIFA of its parents needs to be updated, potentially across // the entire memory range. For the parts that are being accessed below, the access itself - // trivially takes care of that. However, we have to do some more work to also deal with - // the parts that are not being accessed. Specifically what we do is that we - // call `update_last_accessed_after_retag` on the SIFA of the permission set for the part of - // memory outside `perm_map` -- so that part is definitely taken care of. The remaining concern - // is the part of memory that is in the range of `perms_map`, but not accessed below. - // There we have two cases: - // * If we do have an `UnsafeCell` (`has_unsafe_cell` becomes true), then the non-accessed part - // uses `nonfreeze_perm`, so the `nonfreeze_perm` initialized parts are also fine. We enforce - // the `freeze_perm` parts to be accessed, and thus everything is taken care of. - // * If there is no `UnsafeCell`, then `freeze_perm` is used everywhere (both inside and outside the initial range), - // and we update everything to have the `freeze_perm`'s SIFA, so there are no issues. (And this assert below is not - // actually needed in this case). + // trivially takes care of that. However, we have to do some more work to also deal with the + // parts that are not being accessed. Specifically what we do is that we call + // `update_last_accessed_after_retag` on the SIFA of the permission set for the part of + // memory outside `perm_map` -- so that part is definitely taken care of. The remaining + // concern is the part of memory that is in the range of `perms_map`, but not accessed + // below. There we have two cases: + // * If the type is `!Freeze`, then the non-accessed part uses `nonfreeze_perm`, so the + // `nonfreeze_perm` initialized parts are also fine. We enforce the `freeze_perm` parts to + // be accessed via the assert below, and thus everything is taken care of. + // * If the type is `Freeze`, then `freeze_perm` is used everywhere (both inside and outside + // the initial range), and we update everything to have the `freeze_perm`'s SIFA, so there + // are no issues. (And this assert below is not actually needed in this case). assert!(new_perm.freeze_access); let protected = new_perm.protector.is_some(); From a10bdf93b153211e5daf1b1c147b955e690e30ef Mon Sep 17 00:00:00 2001 From: The Miri Cronjob Bot Date: Wed, 27 Aug 2025 04:53:08 +0000 Subject: [PATCH 18/53] Prepare for merging from rust-lang/rust This updates the rust-version file to 269d5b56bcfdf2be82213e72ef9a2e4c592a8c6b. --- src/tools/miri/rust-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tools/miri/rust-version b/src/tools/miri/rust-version index f412399cc8c39..5e83354000247 100644 --- a/src/tools/miri/rust-version +++ b/src/tools/miri/rust-version @@ -1 +1 @@ -a1dbb443527bd126452875eb5d5860c1d001d761 +269d5b56bcfdf2be82213e72ef9a2e4c592a8c6b From 8743a04b89dde55dd956014a5793f27a801efab5 Mon Sep 17 00:00:00 2001 From: Stypox Date: Fri, 22 Aug 2025 21:07:09 +0200 Subject: [PATCH 19/53] Add documentation for tracing --- .../doc/img/perfetto_aggregate_statistics.png | Bin 0 -> 77886 bytes .../img/perfetto_aggregate_statistics_sql.png | Bin 0 -> 181156 bytes src/tools/miri/doc/img/perfetto_span.png | Bin 0 -> 165716 bytes .../doc/img/perfetto_subname_statistics.png | Bin 0 -> 102585 bytes src/tools/miri/doc/img/perfetto_timeline.png | Bin 0 -> 613708 bytes .../perfetto_visualize_argument_values.png | Bin 0 -> 68014 bytes ..._visualize_argument_values_misbehaving.png | Bin 0 -> 68856 bytes ...perfetto_visualize_argument_values_sql.png | Bin 0 -> 261657 bytes src/tools/miri/doc/tracing.md | 292 ++++++++++++++++++ 9 files changed, 292 insertions(+) create mode 100644 src/tools/miri/doc/img/perfetto_aggregate_statistics.png create mode 100644 src/tools/miri/doc/img/perfetto_aggregate_statistics_sql.png create mode 100644 src/tools/miri/doc/img/perfetto_span.png create mode 100644 src/tools/miri/doc/img/perfetto_subname_statistics.png create mode 100644 src/tools/miri/doc/img/perfetto_timeline.png create mode 100644 src/tools/miri/doc/img/perfetto_visualize_argument_values.png create mode 100644 src/tools/miri/doc/img/perfetto_visualize_argument_values_misbehaving.png create mode 100644 src/tools/miri/doc/img/perfetto_visualize_argument_values_sql.png create mode 100644 src/tools/miri/doc/tracing.md diff --git a/src/tools/miri/doc/img/perfetto_aggregate_statistics.png b/src/tools/miri/doc/img/perfetto_aggregate_statistics.png new file mode 100644 index 0000000000000000000000000000000000000000..d4fd3826f47e37c4f631ad971573256dc1ef2409 GIT binary patch literal 77886 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