Skip to content

Commit 605bb61

Browse files
authoredMar 19, 2020
Rollup merge of #70088 - tmiasko:atomic-copy, r=eddyb
Use copy bound in atomic operations to generate simpler MIR
2 parents 637233d + af0d6fc commit 605bb61

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed
 

‎src/libcore/sync/atomic.rs

+15-15
Original file line numberDiff line numberDiff line change
@@ -2259,7 +2259,7 @@ fn strongest_failure_ordering(order: Ordering) -> Ordering {
22592259
}
22602260

22612261
#[inline]
2262-
unsafe fn atomic_store<T>(dst: *mut T, val: T, order: Ordering) {
2262+
unsafe fn atomic_store<T: Copy>(dst: *mut T, val: T, order: Ordering) {
22632263
match order {
22642264
Release => intrinsics::atomic_store_rel(dst, val),
22652265
Relaxed => intrinsics::atomic_store_relaxed(dst, val),
@@ -2270,7 +2270,7 @@ unsafe fn atomic_store<T>(dst: *mut T, val: T, order: Ordering) {
22702270
}
22712271

22722272
#[inline]
2273-
unsafe fn atomic_load<T>(dst: *const T, order: Ordering) -> T {
2273+
unsafe fn atomic_load<T: Copy>(dst: *const T, order: Ordering) -> T {
22742274
match order {
22752275
Acquire => intrinsics::atomic_load_acq(dst),
22762276
Relaxed => intrinsics::atomic_load_relaxed(dst),
@@ -2282,7 +2282,7 @@ unsafe fn atomic_load<T>(dst: *const T, order: Ordering) -> T {
22822282

22832283
#[inline]
22842284
#[cfg(target_has_atomic = "8")]
2285-
unsafe fn atomic_swap<T>(dst: *mut T, val: T, order: Ordering) -> T {
2285+
unsafe fn atomic_swap<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
22862286
match order {
22872287
Acquire => intrinsics::atomic_xchg_acq(dst, val),
22882288
Release => intrinsics::atomic_xchg_rel(dst, val),
@@ -2295,7 +2295,7 @@ unsafe fn atomic_swap<T>(dst: *mut T, val: T, order: Ordering) -> T {
22952295
/// Returns the previous value (like __sync_fetch_and_add).
22962296
#[inline]
22972297
#[cfg(target_has_atomic = "8")]
2298-
unsafe fn atomic_add<T>(dst: *mut T, val: T, order: Ordering) -> T {
2298+
unsafe fn atomic_add<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
22992299
match order {
23002300
Acquire => intrinsics::atomic_xadd_acq(dst, val),
23012301
Release => intrinsics::atomic_xadd_rel(dst, val),
@@ -2308,7 +2308,7 @@ unsafe fn atomic_add<T>(dst: *mut T, val: T, order: Ordering) -> T {
23082308
/// Returns the previous value (like __sync_fetch_and_sub).
23092309
#[inline]
23102310
#[cfg(target_has_atomic = "8")]
2311-
unsafe fn atomic_sub<T>(dst: *mut T, val: T, order: Ordering) -> T {
2311+
unsafe fn atomic_sub<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
23122312
match order {
23132313
Acquire => intrinsics::atomic_xsub_acq(dst, val),
23142314
Release => intrinsics::atomic_xsub_rel(dst, val),
@@ -2320,7 +2320,7 @@ unsafe fn atomic_sub<T>(dst: *mut T, val: T, order: Ordering) -> T {
23202320

23212321
#[inline]
23222322
#[cfg(target_has_atomic = "8")]
2323-
unsafe fn atomic_compare_exchange<T>(
2323+
unsafe fn atomic_compare_exchange<T: Copy>(
23242324
dst: *mut T,
23252325
old: T,
23262326
new: T,
@@ -2346,7 +2346,7 @@ unsafe fn atomic_compare_exchange<T>(
23462346

23472347
#[inline]
23482348
#[cfg(target_has_atomic = "8")]
2349-
unsafe fn atomic_compare_exchange_weak<T>(
2349+
unsafe fn atomic_compare_exchange_weak<T: Copy>(
23502350
dst: *mut T,
23512351
old: T,
23522352
new: T,
@@ -2372,7 +2372,7 @@ unsafe fn atomic_compare_exchange_weak<T>(
23722372

23732373
#[inline]
23742374
#[cfg(target_has_atomic = "8")]
2375-
unsafe fn atomic_and<T>(dst: *mut T, val: T, order: Ordering) -> T {
2375+
unsafe fn atomic_and<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
23762376
match order {
23772377
Acquire => intrinsics::atomic_and_acq(dst, val),
23782378
Release => intrinsics::atomic_and_rel(dst, val),
@@ -2384,7 +2384,7 @@ unsafe fn atomic_and<T>(dst: *mut T, val: T, order: Ordering) -> T {
23842384

23852385
#[inline]
23862386
#[cfg(target_has_atomic = "8")]
2387-
unsafe fn atomic_nand<T>(dst: *mut T, val: T, order: Ordering) -> T {
2387+
unsafe fn atomic_nand<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
23882388
match order {
23892389
Acquire => intrinsics::atomic_nand_acq(dst, val),
23902390
Release => intrinsics::atomic_nand_rel(dst, val),
@@ -2396,7 +2396,7 @@ unsafe fn atomic_nand<T>(dst: *mut T, val: T, order: Ordering) -> T {
23962396

23972397
#[inline]
23982398
#[cfg(target_has_atomic = "8")]
2399-
unsafe fn atomic_or<T>(dst: *mut T, val: T, order: Ordering) -> T {
2399+
unsafe fn atomic_or<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
24002400
match order {
24012401
Acquire => intrinsics::atomic_or_acq(dst, val),
24022402
Release => intrinsics::atomic_or_rel(dst, val),
@@ -2408,7 +2408,7 @@ unsafe fn atomic_or<T>(dst: *mut T, val: T, order: Ordering) -> T {
24082408

24092409
#[inline]
24102410
#[cfg(target_has_atomic = "8")]
2411-
unsafe fn atomic_xor<T>(dst: *mut T, val: T, order: Ordering) -> T {
2411+
unsafe fn atomic_xor<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
24122412
match order {
24132413
Acquire => intrinsics::atomic_xor_acq(dst, val),
24142414
Release => intrinsics::atomic_xor_rel(dst, val),
@@ -2421,7 +2421,7 @@ unsafe fn atomic_xor<T>(dst: *mut T, val: T, order: Ordering) -> T {
24212421
/// returns the max value (signed comparison)
24222422
#[inline]
24232423
#[cfg(target_has_atomic = "8")]
2424-
unsafe fn atomic_max<T>(dst: *mut T, val: T, order: Ordering) -> T {
2424+
unsafe fn atomic_max<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
24252425
match order {
24262426
Acquire => intrinsics::atomic_max_acq(dst, val),
24272427
Release => intrinsics::atomic_max_rel(dst, val),
@@ -2434,7 +2434,7 @@ unsafe fn atomic_max<T>(dst: *mut T, val: T, order: Ordering) -> T {
24342434
/// returns the min value (signed comparison)
24352435
#[inline]
24362436
#[cfg(target_has_atomic = "8")]
2437-
unsafe fn atomic_min<T>(dst: *mut T, val: T, order: Ordering) -> T {
2437+
unsafe fn atomic_min<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
24382438
match order {
24392439
Acquire => intrinsics::atomic_min_acq(dst, val),
24402440
Release => intrinsics::atomic_min_rel(dst, val),
@@ -2447,7 +2447,7 @@ unsafe fn atomic_min<T>(dst: *mut T, val: T, order: Ordering) -> T {
24472447
/// returns the max value (unsigned comparison)
24482448
#[inline]
24492449
#[cfg(target_has_atomic = "8")]
2450-
unsafe fn atomic_umax<T>(dst: *mut T, val: T, order: Ordering) -> T {
2450+
unsafe fn atomic_umax<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
24512451
match order {
24522452
Acquire => intrinsics::atomic_umax_acq(dst, val),
24532453
Release => intrinsics::atomic_umax_rel(dst, val),
@@ -2460,7 +2460,7 @@ unsafe fn atomic_umax<T>(dst: *mut T, val: T, order: Ordering) -> T {
24602460
/// returns the min value (unsigned comparison)
24612461
#[inline]
24622462
#[cfg(target_has_atomic = "8")]
2463-
unsafe fn atomic_umin<T>(dst: *mut T, val: T, order: Ordering) -> T {
2463+
unsafe fn atomic_umin<T: Copy>(dst: *mut T, val: T, order: Ordering) -> T {
24642464
match order {
24652465
Acquire => intrinsics::atomic_umin_acq(dst, val),
24662466
Release => intrinsics::atomic_umin_rel(dst, val),

0 commit comments

Comments
 (0)
Please sign in to comment.