Skip to content

Commit ef6ad3b

Browse files
authored
Upgrade Rust toolchain to 2025-06-02 (#4123)
Relevant upstream PRs: - rust-lang/rust#141507 (identified by @tautschnig): replaces the atomic_load intrinstics (`atomic_load_seqcst`, `atomic_load_acquire`, and `atomic_load_relaxed`) by a new `atomic_load` intrinsic that is generic in the atomic ordering. Update the Kani code and tests accordingly. - rust-lang/rust#137574: Moved the `num` module from `std/src/num.rs` to `std/src/num/mod.rs` which required updating the corresponding path in the `script-based-pre/verify_std_cmd` test. Resolves #4120 ### Call-outs: - Instead of replacing the `String` parameter of Kani's `AtomicLoad` enum variant by `AtomicOrdering`, I opted to remove the parameter altogether since Kani doesn't do anything with it at the moment. We can easily add a parameter to that enum variant in the future if Kani needs it. - The upstream change to `atomic_load` is expected to be followed by similar changes to all atomic intrinsics. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 and MIT licenses.
1 parent c56913c commit ef6ad3b

File tree

8 files changed

+15
-13
lines changed

8 files changed

+15
-13
lines changed

kani-compiler/src/codegen_cprover_gotoc/codegen/intrinsic.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ impl GotocCtx<'_> {
308308
}
309309

310310
Intrinsic::AtomicFence(_) => self.codegen_atomic_noop(intrinsic_str, loc),
311-
Intrinsic::AtomicLoad(_) => self.codegen_atomic_load(intrinsic_str, fargs, place, loc),
311+
Intrinsic::AtomicLoad => self.codegen_atomic_load(intrinsic_str, fargs, place, loc),
312312
Intrinsic::AtomicMax(_) => codegen_atomic_binop!(max),
313313
Intrinsic::AtomicMin(_) => codegen_atomic_binop!(min),
314314
Intrinsic::AtomicNand(_) => codegen_atomic_binop!(bitnand),

kani-compiler/src/intrinsics.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub enum Intrinsic {
2323
AtomicCxchg(String),
2424
AtomicCxchgWeak(String),
2525
AtomicFence(String),
26-
AtomicLoad(String),
26+
AtomicLoad,
2727
AtomicMax(String),
2828
AtomicMin(String),
2929
AtomicNand(String),
@@ -483,9 +483,9 @@ fn try_match_atomic(intrinsic_instance: &Instance) -> Option<Intrinsic> {
483483
} else if let Some(suffix) = intrinsic_str.strip_prefix("atomic_fence_") {
484484
assert_sig_matches!(sig, => RigidTy::Tuple(_));
485485
Some(Intrinsic::AtomicFence(suffix.into()))
486-
} else if let Some(suffix) = intrinsic_str.strip_prefix("atomic_load_") {
486+
} else if intrinsic_str == "atomic_load" {
487487
assert_sig_matches!(sig, RigidTy::RawPtr(_, Mutability::Not) => _);
488-
Some(Intrinsic::AtomicLoad(suffix.into()))
488+
Some(Intrinsic::AtomicLoad)
489489
} else if let Some(suffix) = intrinsic_str.strip_prefix("atomic_max_") {
490490
assert_sig_matches!(sig, RigidTy::RawPtr(_, Mutability::Mut), _ => _);
491491
Some(Intrinsic::AtomicMax(suffix.into()))

kani-compiler/src/kani_middle/points_to/points_to_analysis.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ impl<'tcx> Analysis<'tcx> for PointsToAnalysis<'_, 'tcx> {
227227
}
228228
// All `atomic_load` intrinsics take `src` as an argument.
229229
// This is equivalent to `destination = *src`.
230-
Intrinsic::AtomicLoad(_) => {
230+
Intrinsic::AtomicLoad => {
231231
let src_set = self.successors_for_deref(state, args[0].node.clone());
232232
let destination_set = state.resolve_place(*destination, self.instance);
233233
state.extend(&destination_set, &state.successors(&src_set));

kani-compiler/src/kani_middle/transform/check_uninit/ptr_uninit/uninit_visitor.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ impl MirVisitor for CheckUninitVisitor {
286286
Intrinsic::AtomicAnd(_)
287287
| Intrinsic::AtomicCxchg(_)
288288
| Intrinsic::AtomicCxchgWeak(_)
289-
| Intrinsic::AtomicLoad(_)
289+
| Intrinsic::AtomicLoad
290290
| Intrinsic::AtomicMax(_)
291291
| Intrinsic::AtomicMin(_)
292292
| Intrinsic::AtomicNand(_)

rust-toolchain.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
# SPDX-License-Identifier: Apache-2.0 OR MIT
33

44
[toolchain]
5-
channel = "nightly-2025-05-30"
5+
channel = "nightly-2025-06-02"
66
components = ["llvm-tools", "rustc-dev", "rust-src", "rustfmt"]

tests/expected/uninit/atomic/atomic.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ fn local_atomic_uninit() {
2121
std::intrinsics::atomic_store_relaxed(ptr, 1);
2222
}
2323
1 => {
24-
std::intrinsics::atomic_load_relaxed(ptr as *const u8);
24+
std::intrinsics::atomic_load::<_, { std::intrinsics::AtomicOrdering::Relaxed }>(
25+
ptr as *const u8,
26+
);
2527
}
2628
_ => {
2729
std::intrinsics::atomic_cxchg_relaxed_relaxed(ptr, 1, 1);

tests/kani/Intrinsics/Atomic/Unstable/AtomicLoad/main.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// expected result.
66

77
#![feature(core_intrinsics)]
8-
use std::intrinsics::{atomic_load_acquire, atomic_load_relaxed, atomic_load_seqcst};
8+
use std::intrinsics::{AtomicOrdering, atomic_load};
99

1010
#[kani::proof]
1111
fn main() {
@@ -18,9 +18,9 @@ fn main() {
1818
let ptr_a3: *const u8 = &a3;
1919

2020
unsafe {
21-
let x1 = atomic_load_seqcst(ptr_a1);
22-
let x2 = atomic_load_acquire(ptr_a2);
23-
let x3 = atomic_load_relaxed(ptr_a3);
21+
let x1 = atomic_load::<_, { AtomicOrdering::SeqCst }>(ptr_a1);
22+
let x2 = atomic_load::<_, { AtomicOrdering::Acquire }>(ptr_a2);
23+
let x3 = atomic_load::<_, { AtomicOrdering::Relaxed }>(ptr_a3);
2424

2525
assert!(x1 == 1);
2626
assert!(x2 == 1);

tests/script-based-pre/verify_std_cmd/verify_std.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ mod verify {
4242

4343
echo "[TEST] Modify library"
4444
echo "${CORE_CODE}" >> ${TMP_DIR}/library/core/src/lib.rs
45-
echo "${STD_CODE}" >> ${TMP_DIR}/library/std/src/num.rs
45+
echo "${STD_CODE}" >> ${TMP_DIR}/library/std/src/num/mod.rs
4646

4747
# Note: Prepending with sed doesn't work on MacOs the same way it does in linux.
4848
# sed -i '1s/^/#![cfg_attr(kani, feature(kani))]\n/' ${TMP_DIR}/library/std/src/lib.rs

0 commit comments

Comments
 (0)