From 3ee56989c7f3d355b32f194fca03c0e47a3bd445 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Sun, 24 Jul 2022 08:48:58 -0400 Subject: [PATCH] get rid of some uses of core_intrinsics --- tests/fail/data_race/atomic_read_na_write_race1.rs | 7 ++----- tests/fail/data_race/atomic_read_na_write_race1.stderr | 4 ++-- tests/fail/data_race/atomic_write_na_read_race2.rs | 7 ++----- tests/fail/data_race/atomic_write_na_read_race2.stderr | 2 +- tests/fail/data_race/atomic_write_na_write_race1.rs | 7 ++----- tests/fail/data_race/atomic_write_na_write_race1.stderr | 2 +- tests/fail/weak_memory/racing_mixed_size_read.rs | 8 +++----- tests/fail/weak_memory/racing_mixed_size_read.stderr | 4 ++-- tests/pass/weak_memory/extra_cpp.rs | 1 - tests/pass/weak_memory/extra_cpp_unsafe.rs | 3 +-- 10 files changed, 16 insertions(+), 29 deletions(-) diff --git a/tests/fail/data_race/atomic_read_na_write_race1.rs b/tests/fail/data_race/atomic_read_na_write_race1.rs index 1ef021edc8c..30900a85d00 100644 --- a/tests/fail/data_race/atomic_read_na_write_race1.rs +++ b/tests/fail/data_race/atomic_read_na_write_race1.rs @@ -1,10 +1,8 @@ // We want to control preemption here. //@compile-flags: -Zmiri-preemption-rate=0 //@ignore-target-windows: Concurrency on Windows is not supported yet. -#![feature(core_intrinsics)] -use std::intrinsics; -use std::sync::atomic::AtomicUsize; +use std::sync::atomic::{AtomicUsize, Ordering}; use std::thread::spawn; #[derive(Copy, Clone)] @@ -23,8 +21,7 @@ pub fn main() { }); let j2 = spawn(move || { - //Equivalent to: (&*c.0).load(Ordering::SeqCst) - intrinsics::atomic_load_seqcst(c.0 as *mut usize) //~ ERROR: Data race detected between Atomic Load on thread `` and Write on thread `` + (&*c.0).load(Ordering::SeqCst) //~ ERROR: Data race detected between Atomic Load on thread `` and Write on thread `` }); j1.join().unwrap(); diff --git a/tests/fail/data_race/atomic_read_na_write_race1.stderr b/tests/fail/data_race/atomic_read_na_write_race1.stderr index 2a0ca926078..e7a219e1235 100644 --- a/tests/fail/data_race/atomic_read_na_write_race1.stderr +++ b/tests/fail/data_race/atomic_read_na_write_race1.stderr @@ -1,8 +1,8 @@ error: Undefined Behavior: Data race detected between Atomic Load on thread `` and Write on thread `` at ALLOC --> $DIR/atomic_read_na_write_race1.rs:LL:CC | -LL | intrinsics::atomic_load_seqcst(c.0 as *mut usize) - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Data race detected between Atomic Load on thread `` and Write on thread `` at ALLOC +LL | (&*c.0).load(Ordering::SeqCst) + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Data race detected between Atomic Load on thread `` and Write on thread `` at ALLOC | = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior = help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information diff --git a/tests/fail/data_race/atomic_write_na_read_race2.rs b/tests/fail/data_race/atomic_write_na_read_race2.rs index 77b2945f737..1a79dde0b08 100644 --- a/tests/fail/data_race/atomic_write_na_read_race2.rs +++ b/tests/fail/data_race/atomic_write_na_read_race2.rs @@ -1,10 +1,8 @@ // We want to control preemption here. //@compile-flags: -Zmiri-preemption-rate=0 //@ignore-target-windows: Concurrency on Windows is not supported yet. -#![feature(core_intrinsics)] -use std::intrinsics::atomic_store; -use std::sync::atomic::AtomicUsize; +use std::sync::atomic::{AtomicUsize, Ordering}; use std::thread::spawn; #[derive(Copy, Clone)] @@ -23,8 +21,7 @@ pub fn main() { }); let j2 = spawn(move || { - //Equivalent to: (&*c.0).store(32, Ordering::SeqCst) - atomic_store(c.0 as *mut usize, 32); //~ ERROR: Data race detected between Atomic Store on thread `` and Read on thread `` + (&*c.0).store(32, Ordering::SeqCst); //~ ERROR: Data race detected between Atomic Store on thread `` and Read on thread `` }); j1.join().unwrap(); diff --git a/tests/fail/data_race/atomic_write_na_read_race2.stderr b/tests/fail/data_race/atomic_write_na_read_race2.stderr index 69bf6c5f374..e9c6005f27e 100644 --- a/tests/fail/data_race/atomic_write_na_read_race2.stderr +++ b/tests/fail/data_race/atomic_write_na_read_race2.stderr @@ -1,7 +1,7 @@ error: Undefined Behavior: Data race detected between Atomic Store on thread `` and Read on thread `` at ALLOC --> $DIR/atomic_write_na_read_race2.rs:LL:CC | -LL | atomic_store(c.0 as *mut usize, 32); +LL | (&*c.0).store(32, Ordering::SeqCst); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Data race detected between Atomic Store on thread `` and Read on thread `` at ALLOC | = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior diff --git a/tests/fail/data_race/atomic_write_na_write_race1.rs b/tests/fail/data_race/atomic_write_na_write_race1.rs index 34922dd595e..04015c2d142 100644 --- a/tests/fail/data_race/atomic_write_na_write_race1.rs +++ b/tests/fail/data_race/atomic_write_na_write_race1.rs @@ -1,10 +1,8 @@ // We want to control preemption here. //@compile-flags: -Zmiri-preemption-rate=0 //@ignore-target-windows: Concurrency on Windows is not supported yet. -#![feature(core_intrinsics)] -use std::intrinsics::atomic_store; -use std::sync::atomic::AtomicUsize; +use std::sync::atomic::{AtomicUsize, Ordering}; use std::thread::spawn; #[derive(Copy, Clone)] @@ -23,8 +21,7 @@ pub fn main() { }); let j2 = spawn(move || { - //Equivalent to: (&*c.0).store(64, Ordering::SeqCst) - atomic_store(c.0 as *mut usize, 64); //~ ERROR: Data race detected between Atomic Store on thread `` and Write on thread `` + (&*c.0).store(64, Ordering::SeqCst); //~ ERROR: Data race detected between Atomic Store on thread `` and Write on thread `` }); j1.join().unwrap(); diff --git a/tests/fail/data_race/atomic_write_na_write_race1.stderr b/tests/fail/data_race/atomic_write_na_write_race1.stderr index 6abcf4fe3d1..5ecc4ca0402 100644 --- a/tests/fail/data_race/atomic_write_na_write_race1.stderr +++ b/tests/fail/data_race/atomic_write_na_write_race1.stderr @@ -1,7 +1,7 @@ error: Undefined Behavior: Data race detected between Atomic Store on thread `` and Write on thread `` at ALLOC --> $DIR/atomic_write_na_write_race1.rs:LL:CC | -LL | atomic_store(c.0 as *mut usize, 64); +LL | (&*c.0).store(64, Ordering::SeqCst); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Data race detected between Atomic Store on thread `` and Write on thread `` at ALLOC | = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior diff --git a/tests/fail/weak_memory/racing_mixed_size_read.rs b/tests/fail/weak_memory/racing_mixed_size_read.rs index aeaa6b68f6c..1c0b1c2be8f 100644 --- a/tests/fail/weak_memory/racing_mixed_size_read.rs +++ b/tests/fail/weak_memory/racing_mixed_size_read.rs @@ -2,10 +2,8 @@ //@compile-flags: -Zmiri-preemption-rate=0 //@ignore-target-windows: Concurrency on Windows is not supported yet. -#![feature(core_intrinsics)] - -use std::sync::atomic::AtomicU32; use std::sync::atomic::Ordering::*; +use std::sync::atomic::{AtomicU16, AtomicU32}; use std::thread::spawn; fn static_atomic(val: u32) -> &'static AtomicU32 { @@ -31,8 +29,8 @@ pub fn main() { let x_ptr = x as *const AtomicU32 as *const u32; let x_split = split_u32_ptr(x_ptr); unsafe { - let hi = &(*x_split)[0] as *const u16; - std::intrinsics::atomic_load_relaxed(hi); //~ ERROR: imperfectly overlapping + let hi = x_split as *const u16 as *const AtomicU16; + (*hi).load(Relaxed); //~ ERROR: imperfectly overlapping } }); diff --git a/tests/fail/weak_memory/racing_mixed_size_read.stderr b/tests/fail/weak_memory/racing_mixed_size_read.stderr index 9988f4a86d4..8dbf9e6948b 100644 --- a/tests/fail/weak_memory/racing_mixed_size_read.stderr +++ b/tests/fail/weak_memory/racing_mixed_size_read.stderr @@ -1,8 +1,8 @@ error: unsupported operation: racy imperfectly overlapping atomic access is not possible in the C++20 memory model, and not supported by Miri's weak memory emulation --> $DIR/racing_mixed_size_read.rs:LL:CC | -LL | std::intrinsics::atomic_load_relaxed(hi); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ racy imperfectly overlapping atomic access is not possible in the C++20 memory model, and not supported by Miri's weak memory emulation +LL | (*hi).load(Relaxed); + | ^^^^^^^^^^^^^^^^^^^ racy imperfectly overlapping atomic access is not possible in the C++20 memory model, and not supported by Miri's weak memory emulation | = help: this is likely not a bug in the program; it indicates that the program performed an operation that the interpreter does not support = note: backtrace: diff --git a/tests/pass/weak_memory/extra_cpp.rs b/tests/pass/weak_memory/extra_cpp.rs index 52c13cbdced..d98fba26ffa 100644 --- a/tests/pass/weak_memory/extra_cpp.rs +++ b/tests/pass/weak_memory/extra_cpp.rs @@ -5,7 +5,6 @@ // but doable in safe (at least sound) Rust. #![feature(atomic_from_mut)] -#![feature(core_intrinsics)] use std::sync::atomic::Ordering::*; use std::sync::atomic::{AtomicU16, AtomicU32}; diff --git a/tests/pass/weak_memory/extra_cpp_unsafe.rs b/tests/pass/weak_memory/extra_cpp_unsafe.rs index 1c6c370ced3..f5c6021a4a8 100644 --- a/tests/pass/weak_memory/extra_cpp_unsafe.rs +++ b/tests/pass/weak_memory/extra_cpp_unsafe.rs @@ -7,7 +7,6 @@ // memory model in the future. #![feature(atomic_from_mut)] -#![feature(core_intrinsics)] use std::sync::atomic::AtomicU32; use std::sync::atomic::Ordering::*; @@ -27,7 +26,7 @@ fn racing_mixed_atomicity_read() { let j2 = spawn(move || { let x_ptr = x as *const AtomicU32 as *const u32; - unsafe { std::intrinsics::atomic_load_relaxed(x_ptr) } + unsafe { x_ptr.read() } }); let r1 = j1.join().unwrap(); -- 2.44.0