From 25c8f61a9f84ecd546dd53b6b891c53d7bcd246a Mon Sep 17 00:00:00 2001 From: gnzlbg Date: Mon, 4 Mar 2019 18:04:08 +0100 Subject: [PATCH] Move black_box back to rust-lang/libtest and use explicit imports --- src/libtest/lib.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/libtest/lib.rs b/src/libtest/lib.rs index 82e44ba4873..c15ed308ff0 100644 --- a/src/libtest/lib.rs +++ b/src/libtest/lib.rs @@ -12,8 +12,27 @@ #![unstable(feature = "test", issue = "27812")] #![doc(html_root_url = "https://doc.rust-lang.org/nightly/", test(attr(deny(warnings))))] +#![feature(asm)] #![feature(staged_api)] #![feature(test)] extern crate libtest; -pub use libtest::*; +pub use libtest::{test_main_static, TestDescAndFn, StaticTestFn, StaticBenchFn, Options}; + +/// 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 +}