diff --git a/src/libcore/hint.rs b/src/libcore/hint.rs index b2f82ef0d17..d6ddab0d8f5 100644 --- a/src/libcore/hint.rs +++ b/src/libcore/hint.rs @@ -91,3 +91,22 @@ pub fn spin_loop() { } } } + +/// A function that is opaque to the optimizer, to allow benchmarks to +/// pretend to use outputs to assist in avoiding dead-code +/// elimination. +/// +/// This function is a no-op, and does not even read from `dummy`. +#[cfg_attr(any(target_arch = "asmjs", target_arch = "wasm32"), inline(never))] +#[unstable(feature = "test", issue = "27812")] +pub fn black_box(dummy: T) -> T { + #[cfg(not(any(target_arch = "asmjs", target_arch = "wasm32")))] { + // we need to "use" the argument in some way LLVM can't + // introspect. + unsafe { asm!("" : : "r"(&dummy)) } + dummy + } + #[cfg(any(target_arch = "asmjs", target_arch = "wasm32"))] { + dummy + } +} diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index cb0ce480e42..5c91c0ec43b 100644 --- a/src/libtest/lib.rs +++ b/src/libtest/lib.rs @@ -27,23 +27,7 @@ pub use libtest::{ TestResult, TrFailed, TrFailedMsg, TrIgnored, TrOk, stats::Summary }; -/// A function that is opaque to the optimizer, to allow benchmarks to -/// pretend to use outputs to assist in avoiding dead-code -/// elimination. -/// -/// This function is a no-op, and does not even read from `dummy`. -#[cfg(not(any(target_arch = "asmjs", target_arch = "wasm32")))] -pub fn black_box(dummy: T) -> T { - // we need to "use" the argument in some way LLVM can't - // introspect. - unsafe { asm!("" : : "r"(&dummy)) } - dummy -} -#[cfg(any(target_arch = "asmjs", target_arch = "wasm32"))] -#[inline(never)] -pub fn black_box(dummy: T) -> T { - dummy -} +pub use std::hint::black_box; #[cfg(test)] mod tests {