From 23d54ad96f10ba1e468a167b2dc6940478e850d6 Mon Sep 17 00:00:00 2001
From: Ralf Jung <post@ralfj.de>
Date: Thu, 15 Apr 2021 11:19:24 +0200
Subject: [PATCH 1/2] move core::hint::black_box under its own feature gate
---
compiler/rustc_index/src/lib.rs | 2 ++
library/core/benches/fmt.rs | 8 ++++----
library/core/src/hint.rs | 2 +-
library/std/src/lib.rs | 1 +
library/test/src/bench.rs | 11 +++++++++--
library/test/src/lib.rs | 1 +
src/test/ui/consts/cast-discriminant-zst-enum.rs | 2 +-
src/test/ui/consts/const_discriminant.rs | 2 +-
8 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/compiler/rustc_index/src/lib.rs b/compiler/rustc_index/src/lib.rs
index 9c306d0251200..4036f4da1a76b 100644
--- a/compiler/rustc_index/src/lib.rs
+++ b/compiler/rustc_index/src/lib.rs
@@ -1,4 +1,6 @@
#![feature(allow_internal_unstable)]
+#![feature(bench_black_box)]
+#![feature(const_fn)]
#![feature(const_panic)]
#![feature(extend_one)]
#![feature(iter_zip)]
diff --git a/library/core/benches/fmt.rs b/library/core/benches/fmt.rs
index 2792181acc352..9df66263459b1 100644
--- a/library/core/benches/fmt.rs
+++ b/library/core/benches/fmt.rs
@@ -112,7 +112,7 @@ fn write_str_macro_debug(bh: &mut Bencher) {
#[bench]
fn write_u128_max(bh: &mut Bencher) {
bh.iter(|| {
- std::hint::black_box(format!("{}", u128::MAX));
+ test::black_box(format!("{}", u128::MAX));
});
}
@@ -120,20 +120,20 @@ fn write_u128_max(bh: &mut Bencher) {
fn write_u128_min(bh: &mut Bencher) {
bh.iter(|| {
let s = format!("{}", 0u128);
- std::hint::black_box(s);
+ test::black_box(s);
});
}
#[bench]
fn write_u64_max(bh: &mut Bencher) {
bh.iter(|| {
- std::hint::black_box(format!("{}", u64::MAX));
+ test::black_box(format!("{}", u64::MAX));
});
}
#[bench]
fn write_u64_min(bh: &mut Bencher) {
bh.iter(|| {
- std::hint::black_box(format!("{}", 0u64));
+ test::black_box(format!("{}", 0u64));
});
}
diff --git a/library/core/src/hint.rs b/library/core/src/hint.rs
index 313729581acd9..f7aec73644921 100644
--- a/library/core/src/hint.rs
+++ b/library/core/src/hint.rs
@@ -154,7 +154,7 @@ pub fn spin_loop() {
/// [`std::convert::identity`]: crate::convert::identity
#[cfg_attr(not(miri), inline)]
#[cfg_attr(miri, inline(never))]
-#[unstable(feature = "test", issue = "50297")]
+#[unstable(feature = "bench_black_box", issue = "64102")]
#[cfg_attr(miri, allow(unused_mut))]
pub fn black_box<T>(mut dummy: T) -> T {
// We need to "use" the argument in some way LLVM can't introspect, and on
diff --git a/library/std/src/lib.rs b/library/std/src/lib.rs
index 089d43483fcb3..0ab9f490fd420 100644
--- a/library/std/src/lib.rs
+++ b/library/std/src/lib.rs
@@ -233,6 +233,7 @@
#![feature(assert_matches)]
#![feature(associated_type_bounds)]
#![feature(atomic_mut_ptr)]
+#![feature(bench_black_box)]
#![feature(box_syntax)]
#![feature(c_variadic)]
#![feature(cfg_accessible)]
diff --git a/library/test/src/bench.rs b/library/test/src/bench.rs
index 169154187f250..7869ba2c04178 100644
--- a/library/test/src/bench.rs
+++ b/library/test/src/bench.rs
@@ -1,6 +1,4 @@
//! Benchmarking module.
-pub use std::hint::black_box;
-
use super::{
event::CompletedTest,
options::BenchMode,
@@ -16,6 +14,15 @@ use std::panic::{catch_unwind, AssertUnwindSafe};
use std::sync::{Arc, Mutex};
use std::time::{Duration, Instant};
+/// An identity function that *__hints__* to the compiler to be maximally pessimistic about what
+/// `black_box` could do.
+///
+/// See [`std::hint::black_box`] for details.
+#[inline(always)]
+pub fn black_box<T>(dummy: T) -> T {
+ std::hint::black_box(dummy)
+}
+
/// Manager of the benchmarking runs.
///
/// This is fed into functions marked with `#[bench]` to allow for
diff --git a/library/test/src/lib.rs b/library/test/src/lib.rs
index 2e0864f303cc9..9adc099aaa566 100644
--- a/library/test/src/lib.rs
+++ b/library/test/src/lib.rs
@@ -24,6 +24,7 @@
#![feature(rustc_private)]
#![feature(nll)]
#![feature(available_concurrency)]
+#![feature(bench_black_box)]
#![feature(internal_output_capture)]
#![feature(panic_unwind)]
#![feature(staged_api)]
diff --git a/src/test/ui/consts/cast-discriminant-zst-enum.rs b/src/test/ui/consts/cast-discriminant-zst-enum.rs
index 9c02d232e134b..66b76627c02e6 100644
--- a/src/test/ui/consts/cast-discriminant-zst-enum.rs
+++ b/src/test/ui/consts/cast-discriminant-zst-enum.rs
@@ -1,6 +1,6 @@
// run-pass
// Test a ZST enum whose dicriminant is ~0i128. This caused an ICE when casting to a i32.
-#![feature(test)]
+#![feature(bench_black_box)]
use std::hint::black_box;
#[derive(Copy, Clone)]
diff --git a/src/test/ui/consts/const_discriminant.rs b/src/test/ui/consts/const_discriminant.rs
index d016d236dbf81..a47f6af02965b 100644
--- a/src/test/ui/consts/const_discriminant.rs
+++ b/src/test/ui/consts/const_discriminant.rs
@@ -1,6 +1,6 @@
// run-pass
#![feature(const_discriminant)]
-#![feature(test)]
+#![feature(bench_black_box)]
#![allow(dead_code)]
use std::mem::{discriminant, Discriminant};
From 3d16e156aef937ae797892ef05e08b8159a415c4 Mon Sep 17 00:00:00 2001
From: Ralf Jung <post@ralfj.de>
Date: Sat, 24 Apr 2021 11:55:32 +0200
Subject: [PATCH 2/2] fix sanitizer tests
---
compiler/rustc_index/src/lib.rs | 1 -
src/test/ui/sanitize/address.rs | 2 +-
src/test/ui/sanitize/hwaddress.rs | 2 +-
src/test/ui/sanitize/leak.rs | 2 +-
src/test/ui/sanitize/memory.rs | 2 +-
5 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/compiler/rustc_index/src/lib.rs b/compiler/rustc_index/src/lib.rs
index 4036f4da1a76b..4c73b7bf612c7 100644
--- a/compiler/rustc_index/src/lib.rs
+++ b/compiler/rustc_index/src/lib.rs
@@ -1,6 +1,5 @@
#![feature(allow_internal_unstable)]
#![feature(bench_black_box)]
-#![feature(const_fn)]
#![feature(const_panic)]
#![feature(extend_one)]
#![feature(iter_zip)]
diff --git a/src/test/ui/sanitize/address.rs b/src/test/ui/sanitize/address.rs
index cee73b0425ad5..9a26a351d992c 100644
--- a/src/test/ui/sanitize/address.rs
+++ b/src/test/ui/sanitize/address.rs
@@ -7,7 +7,7 @@
// error-pattern: AddressSanitizer: stack-buffer-overflow
// error-pattern: 'xs' (line 15) <== Memory access at offset
-#![feature(test)]
+#![feature(bench_black_box)]
use std::hint::black_box;
diff --git a/src/test/ui/sanitize/hwaddress.rs b/src/test/ui/sanitize/hwaddress.rs
index 88769b7cb4554..bb6986740d906 100644
--- a/src/test/ui/sanitize/hwaddress.rs
+++ b/src/test/ui/sanitize/hwaddress.rs
@@ -7,7 +7,7 @@
// run-fail
// error-pattern: HWAddressSanitizer: tag-mismatch
-#![feature(test)]
+#![feature(bench_black_box)]
use std::hint::black_box;
diff --git a/src/test/ui/sanitize/leak.rs b/src/test/ui/sanitize/leak.rs
index c9f10fe4f467e..f63f81352dada 100644
--- a/src/test/ui/sanitize/leak.rs
+++ b/src/test/ui/sanitize/leak.rs
@@ -6,7 +6,7 @@
// run-fail
// error-pattern: LeakSanitizer: detected memory leaks
-#![feature(test)]
+#![feature(bench_black_box)]
use std::hint::black_box;
use std::mem;
diff --git a/src/test/ui/sanitize/memory.rs b/src/test/ui/sanitize/memory.rs
index a26649a580013..48a482a13aaa9 100644
--- a/src/test/ui/sanitize/memory.rs
+++ b/src/test/ui/sanitize/memory.rs
@@ -13,7 +13,7 @@
#![feature(core_intrinsics)]
#![feature(start)]
-#![feature(test)]
+#![feature(bench_black_box)]
use std::hint::black_box;
use std::mem::MaybeUninit;