72b721f48e
When one of these tests fails, any compiler warnings will be printed to the console, which makes it harder to track down the actual reason for failure. (The outstanding warnings were found by temporarily adding `-Dwarnings` to the compiler arguments for `RunCoverage` in `src/tools/compiletest/src/runtest.rs`.)
84 lines
3.3 KiB
Plaintext
84 lines
3.3 KiB
Plaintext
LL| |// compile-flags: --edition=2018
|
|
LL| |#![feature(no_coverage)]
|
|
LL| |
|
|
LL| |macro_rules! bail {
|
|
LL| | ($msg:literal $(,)?) => {
|
|
LL| | if $msg.len() > 0 {
|
|
LL| | println!("no msg");
|
|
LL| | } else {
|
|
LL| | println!($msg);
|
|
LL| | }
|
|
LL| | return Err(String::from($msg));
|
|
LL| | };
|
|
LL| |}
|
|
LL| |
|
|
LL| |macro_rules! on_error {
|
|
LL| | ($value:expr, $error_message:expr) => {
|
|
LL| | $value.or_else(|e| { // FIXME(85000): no coverage in closure macros
|
|
LL| | let message = format!($error_message, e);
|
|
LL| | if message.len() > 0 {
|
|
LL| | println!("{}", message);
|
|
LL| | Ok(String::from("ok"))
|
|
LL| | } else {
|
|
LL| | bail!("error");
|
|
LL| | }
|
|
LL| | })
|
|
LL| | };
|
|
LL| |}
|
|
LL| |
|
|
LL| 1|fn load_configuration_files() -> Result<String, String> {
|
|
LL| 1| Ok(String::from("config"))
|
|
LL| 1|}
|
|
LL| |
|
|
LL| 1|pub async fn test() -> Result<(), String> {
|
|
LL| 1| println!("Starting service");
|
|
LL| 1| let config = on_error!(load_configuration_files(), "Error loading configs: {}")?;
|
|
^0
|
|
LL| |
|
|
LL| 1| let startup_delay_duration = String::from("arg");
|
|
LL| 1| let _ = (config, startup_delay_duration);
|
|
LL| 1| Ok(())
|
|
LL| 1|}
|
|
LL| |
|
|
LL| |#[no_coverage]
|
|
LL| |fn main() {
|
|
LL| | executor::block_on(test()).unwrap();
|
|
LL| |}
|
|
LL| |
|
|
LL| |mod executor {
|
|
LL| | use core::{
|
|
LL| | future::Future,
|
|
LL| | pin::Pin,
|
|
LL| | task::{Context, Poll, RawWaker, RawWakerVTable, Waker},
|
|
LL| | };
|
|
LL| |
|
|
LL| | #[no_coverage]
|
|
LL| | pub fn block_on<F: Future>(mut future: F) -> F::Output {
|
|
LL| | let mut future = unsafe { Pin::new_unchecked(&mut future) };
|
|
LL| | use std::hint::unreachable_unchecked;
|
|
LL| | static VTABLE: RawWakerVTable = RawWakerVTable::new(
|
|
LL| |
|
|
LL| | #[no_coverage]
|
|
LL| | |_| unsafe { unreachable_unchecked() }, // clone
|
|
LL| |
|
|
LL| | #[no_coverage]
|
|
LL| | |_| unsafe { unreachable_unchecked() }, // wake
|
|
LL| |
|
|
LL| | #[no_coverage]
|
|
LL| | |_| unsafe { unreachable_unchecked() }, // wake_by_ref
|
|
LL| |
|
|
LL| | #[no_coverage]
|
|
LL| | |_| (),
|
|
LL| | );
|
|
LL| | let waker = unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) };
|
|
LL| | let mut context = Context::from_waker(&waker);
|
|
LL| |
|
|
LL| | loop {
|
|
LL| | if let Poll::Ready(val) = future.as_mut().poll(&mut context) {
|
|
LL| | break val;
|
|
LL| | }
|
|
LL| | }
|
|
LL| | }
|
|
LL| |}
|
|
|