diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..97670e937 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,25 @@ +version: 2.1 +jobs: + test-arm: + machine: + image: ubuntu-2004:202101-01 + resource_class: arm.medium + environment: + # Change to pin rust versino + RUST_STABLE: stable + steps: + - checkout + - run: + name: Install Rust + command: | + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustup.sh + chmod +x rustup.sh + ./rustup.sh -y --default-toolchain $RUST_STABLE + source "$HOME"/.cargo/env + # Only run Tokio tests + - run: cargo test --all-features -p tokio + +workflows: + ci: + jobs: + - test-arm diff --git a/.cirrus.yml b/.cirrus.yml index 4bef869c2..390f7883f 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -1,7 +1,5 @@ freebsd_instance: image: freebsd-12-2-release-amd64 -env: - RUSTFLAGS: -D warnings # Test FreeBSD in a full VM on cirrus-ci.com. Test the i686 target too, in the # same VM. The binary will be built in 32-bit mode, but will execute on a @@ -25,7 +23,7 @@ task: name: FreeBSD docs env: RUSTFLAGS: --cfg docsrs - RUSTDOCFLAGS: --cfg docsrs -Dwarnings + RUSTDOCFLAGS: --cfg docsrs setup_script: - pkg install -y bash curl - curl https://sh.rustup.rs -sSf --output rustup.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 05f6e87f3..862dab192 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,7 +7,6 @@ on: name: CI env: - RUSTFLAGS: -Dwarnings RUST_BACKTRACE: 1 nightly: nightly-2021-10-25 minrust: 1.45.2 @@ -65,11 +64,6 @@ jobs: run: cargo hack test --each-feature working-directory: tests-integration - # Run macro build tests - - name: test tests-build --each-feature - run: cargo hack test --each-feature - working-directory: tests-build - # Build benchmarks. Run of benchmarks is done by bench.yml workflow. - name: build benches run: cargo build --benches @@ -129,7 +123,7 @@ jobs: run: cargo test --all-features working-directory: tokio env: - RUSTFLAGS: --cfg tokio_unstable -Dwarnings + RUSTFLAGS: --cfg tokio_unstable miri: name: miri @@ -213,7 +207,7 @@ jobs: - name: check --each-feature --unstable run: cargo hack check --all --each-feature -Z avoid-dev-deps env: - RUSTFLAGS: --cfg tokio_unstable -Dwarnings + RUSTFLAGS: --cfg tokio_unstable minrust: name: minrust @@ -298,7 +292,7 @@ jobs: run: cargo doc --lib --no-deps --all-features --document-private-items env: RUSTFLAGS: --cfg docsrs - RUSTDOCFLAGS: --cfg docsrs -Dwarnings + RUSTDOCFLAGS: --cfg docsrs loom-compile: name: build loom tests @@ -312,7 +306,7 @@ jobs: run: cargo test --no-run --lib --features full working-directory: tokio env: - RUSTFLAGS: --cfg loom --cfg tokio_unstable -Dwarnings + RUSTFLAGS: --cfg loom --cfg tokio_unstable check-readme: name: Check README diff --git a/.github/workflows/loom.yml b/.github/workflows/loom.yml index fde9f1114..088828a1b 100644 --- a/.github/workflows/loom.yml +++ b/.github/workflows/loom.yml @@ -8,7 +8,6 @@ on: name: Loom env: - RUSTFLAGS: -Dwarnings RUST_BACKTRACE: 1 jobs: @@ -35,6 +34,6 @@ jobs: run: cargo test --lib --release --features full -- --nocapture $SCOPE working-directory: tokio env: - RUSTFLAGS: --cfg loom --cfg tokio_unstable -Dwarnings + RUSTFLAGS: --cfg loom --cfg tokio_unstable LOOM_MAX_PREEMPTIONS: 2 SCOPE: ${{ matrix.scope }} diff --git a/Cargo.toml b/Cargo.toml index bc01f1862..0ed9192a2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,5 @@ members = [ "benches", "examples", "stress-test", - "tests-build", "tests-integration", ] diff --git a/tests-build/Cargo.toml b/tests-build/Cargo.toml deleted file mode 100644 index 299af0cf4..000000000 --- a/tests-build/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "tests-build" -version = "0.1.0" -authors = ["Tokio Contributors "] -edition = "2018" -publish = false - -[features] -full = ["tokio/full"] -rt = ["tokio/rt", "tokio/macros"] - -[dependencies] -tokio = { path = "../tokio", optional = true } - -[dev-dependencies] -trybuild = "1.0" diff --git a/tests-build/README.md b/tests-build/README.md deleted file mode 100644 index f491e2bc3..000000000 --- a/tests-build/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Tests the various combination of feature flags. This is broken out to a separate -crate to work around limitations with cargo features. diff --git a/tests-build/src/lib.rs b/tests-build/src/lib.rs deleted file mode 100644 index 7b019cc7c..000000000 --- a/tests-build/src/lib.rs +++ /dev/null @@ -1,2 +0,0 @@ -#[cfg(feature = "tokio")] -pub use tokio; diff --git a/tests-build/tests/fail/macros_core_no_default.rs b/tests-build/tests/fail/macros_core_no_default.rs deleted file mode 100644 index 23f8847df..000000000 --- a/tests-build/tests/fail/macros_core_no_default.rs +++ /dev/null @@ -1,6 +0,0 @@ -use tests_build::tokio; - -#[tokio::main] -async fn my_fn() {} - -fn main() {} diff --git a/tests-build/tests/fail/macros_core_no_default.stderr b/tests-build/tests/fail/macros_core_no_default.stderr deleted file mode 100644 index 676acc8db..000000000 --- a/tests-build/tests/fail/macros_core_no_default.stderr +++ /dev/null @@ -1,7 +0,0 @@ -error: The default runtime flavor is `multi_thread`, but the `rt-multi-thread` feature is disabled. - --> $DIR/macros_core_no_default.rs:3:1 - | -3 | #[tokio::main] - | ^^^^^^^^^^^^^^ - | - = note: this error originates in the attribute macro `tokio::main` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/tests-build/tests/fail/macros_dead_code.rs b/tests-build/tests/fail/macros_dead_code.rs deleted file mode 100644 index f2ada6f83..000000000 --- a/tests-build/tests/fail/macros_dead_code.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![deny(dead_code)] - -use tests_build::tokio; - -#[tokio::main] -async fn f() {} - -fn main() {} diff --git a/tests-build/tests/fail/macros_dead_code.stderr b/tests-build/tests/fail/macros_dead_code.stderr deleted file mode 100644 index 816c294bd..000000000 --- a/tests-build/tests/fail/macros_dead_code.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error: function is never used: `f` - --> $DIR/macros_dead_code.rs:6:10 - | -6 | async fn f() {} - | ^ - | -note: the lint level is defined here - --> $DIR/macros_dead_code.rs:1:9 - | -1 | #![deny(dead_code)] - | ^^^^^^^^^ diff --git a/tests-build/tests/fail/macros_invalid_input.rs b/tests-build/tests/fail/macros_invalid_input.rs deleted file mode 100644 index eb04eca76..000000000 --- a/tests-build/tests/fail/macros_invalid_input.rs +++ /dev/null @@ -1,40 +0,0 @@ -use tests_build::tokio; - -#[tokio::main] -fn main_is_not_async() {} - -#[tokio::main(foo)] -async fn main_attr_has_unknown_args() {} - -#[tokio::main(threadpool::bar)] -async fn main_attr_has_path_args() {} - -#[tokio::test] -fn test_is_not_async() {} - -#[tokio::test(foo)] -async fn test_attr_has_args() {} - -#[tokio::test(foo = 123)] -async fn test_unexpected_attr() {} - -#[tokio::test(flavor = 123)] -async fn test_flavor_not_string() {} - -#[tokio::test(flavor = "foo")] -async fn test_unknown_flavor() {} - -#[tokio::test(flavor = "multi_thread", start_paused = false)] -async fn test_multi_thread_with_start_paused() {} - -#[tokio::test(flavor = "multi_thread", worker_threads = "foo")] -async fn test_worker_threads_not_int() {} - -#[tokio::test(flavor = "current_thread", worker_threads = 4)] -async fn test_worker_threads_and_current_thread() {} - -#[tokio::test] -#[test] -async fn test_has_second_test_attr() {} - -fn main() {} diff --git a/tests-build/tests/fail/macros_invalid_input.stderr b/tests-build/tests/fail/macros_invalid_input.stderr deleted file mode 100644 index 11337a94f..000000000 --- a/tests-build/tests/fail/macros_invalid_input.stderr +++ /dev/null @@ -1,71 +0,0 @@ -error: the `async` keyword is missing from the function declaration - --> $DIR/macros_invalid_input.rs:4:1 - | -4 | fn main_is_not_async() {} - | ^^ - -error: Unknown attribute foo is specified; expected one of: `flavor`, `worker_threads`, `start_paused` - --> $DIR/macros_invalid_input.rs:6:15 - | -6 | #[tokio::main(foo)] - | ^^^ - -error: Must have specified ident - --> $DIR/macros_invalid_input.rs:9:15 - | -9 | #[tokio::main(threadpool::bar)] - | ^^^^^^^^^^^^^^^ - -error: the `async` keyword is missing from the function declaration - --> $DIR/macros_invalid_input.rs:13:1 - | -13 | fn test_is_not_async() {} - | ^^ - -error: Unknown attribute foo is specified; expected one of: `flavor`, `worker_threads`, `start_paused` - --> $DIR/macros_invalid_input.rs:15:15 - | -15 | #[tokio::test(foo)] - | ^^^ - -error: Unknown attribute foo is specified; expected one of: `flavor`, `worker_threads`, `start_paused` - --> $DIR/macros_invalid_input.rs:18:15 - | -18 | #[tokio::test(foo = 123)] - | ^^^^^^^^^ - -error: Failed to parse value of `flavor` as string. - --> $DIR/macros_invalid_input.rs:21:24 - | -21 | #[tokio::test(flavor = 123)] - | ^^^ - -error: No such runtime flavor `foo`. The runtime flavors are `current_thread` and `multi_thread`. - --> $DIR/macros_invalid_input.rs:24:24 - | -24 | #[tokio::test(flavor = "foo")] - | ^^^^^ - -error: The `start_paused` option requires the `current_thread` runtime flavor. Use `#[tokio::test(flavor = "current_thread")]` - --> $DIR/macros_invalid_input.rs:27:55 - | -27 | #[tokio::test(flavor = "multi_thread", start_paused = false)] - | ^^^^^ - -error: Failed to parse value of `worker_threads` as integer. - --> $DIR/macros_invalid_input.rs:30:57 - | -30 | #[tokio::test(flavor = "multi_thread", worker_threads = "foo")] - | ^^^^^ - -error: The `worker_threads` option requires the `multi_thread` runtime flavor. Use `#[tokio::test(flavor = "multi_thread")]` - --> $DIR/macros_invalid_input.rs:33:59 - | -33 | #[tokio::test(flavor = "current_thread", worker_threads = 4)] - | ^ - -error: second test attribute is supplied - --> $DIR/macros_invalid_input.rs:37:1 - | -37 | #[test] - | ^^^^^^^ diff --git a/tests-build/tests/fail/macros_type_mismatch.rs b/tests-build/tests/fail/macros_type_mismatch.rs deleted file mode 100644 index 0a5b9c4c7..000000000 --- a/tests-build/tests/fail/macros_type_mismatch.rs +++ /dev/null @@ -1,26 +0,0 @@ -use tests_build::tokio; - -#[tokio::main] -async fn missing_semicolon_or_return_type() { - Ok(()) -} - -#[tokio::main] -async fn missing_return_type() { - return Ok(()); -} - -#[tokio::main] -async fn extra_semicolon() -> Result<(), ()> { - /* TODO(taiki-e): help message still wrong - help: try using a variant of the expected enum - | - 23 | Ok(Ok(());) - | - 23 | Err(Ok(());) - | - */ - Ok(()); -} - -fn main() {} diff --git a/tests-build/tests/fail/macros_type_mismatch.stderr b/tests-build/tests/fail/macros_type_mismatch.stderr deleted file mode 100644 index a8fa99bc6..000000000 --- a/tests-build/tests/fail/macros_type_mismatch.stderr +++ /dev/null @@ -1,45 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/macros_type_mismatch.rs:5:5 - | -5 | Ok(()) - | ^^^^^^ expected `()`, found enum `Result` - | - = note: expected unit type `()` - found enum `Result<(), _>` -help: consider using a semicolon here - | -5 | Ok(()); - | + -help: try adding a return type - | -4 | async fn missing_semicolon_or_return_type() -> Result<(), _> { - | ++++++++++++++++ - -error[E0308]: mismatched types - --> $DIR/macros_type_mismatch.rs:10:5 - | -9 | async fn missing_return_type() { - | - help: try adding a return type: `-> Result<(), _>` -10 | return Ok(()); - | ^^^^^^^^^^^^^^ expected `()`, found enum `Result` - | - = note: expected unit type `()` - found enum `Result<(), _>` - -error[E0308]: mismatched types - --> $DIR/macros_type_mismatch.rs:23:5 - | -14 | async fn extra_semicolon() -> Result<(), ()> { - | -------------- expected `Result<(), ()>` because of return type -... -23 | Ok(()); - | ^^^^^^^ expected enum `Result`, found `()` - | - = note: expected enum `Result<(), ()>` - found unit type `()` -help: try using a variant of the expected enum - | -23 | Ok(Ok(());) - | -23 | Err(Ok(());) - | diff --git a/tests-build/tests/macros.rs b/tests-build/tests/macros.rs deleted file mode 100644 index 0a180dfb7..000000000 --- a/tests-build/tests/macros.rs +++ /dev/null @@ -1,27 +0,0 @@ -#[test] -fn compile_fail_full() { - let t = trybuild::TestCases::new(); - - #[cfg(feature = "full")] - t.pass("tests/pass/forward_args_and_output.rs"); - - #[cfg(feature = "full")] - t.pass("tests/pass/macros_main_return.rs"); - - #[cfg(feature = "full")] - t.pass("tests/pass/macros_main_loop.rs"); - - #[cfg(feature = "full")] - t.compile_fail("tests/fail/macros_invalid_input.rs"); - - #[cfg(feature = "full")] - t.compile_fail("tests/fail/macros_dead_code.rs"); - - #[cfg(feature = "full")] - t.compile_fail("tests/fail/macros_type_mismatch.rs"); - - #[cfg(all(feature = "rt", not(feature = "full")))] - t.compile_fail("tests/fail/macros_core_no_default.rs"); - - drop(t); -} diff --git a/tests-build/tests/macros_clippy.rs b/tests-build/tests/macros_clippy.rs deleted file mode 100644 index 0f3f4bb0b..000000000 --- a/tests-build/tests/macros_clippy.rs +++ /dev/null @@ -1,7 +0,0 @@ -#[cfg(feature = "full")] -#[tokio::test] -async fn test_with_semicolon_without_return_type() { - #![deny(clippy::semicolon_if_nothing_returned)] - - dbg!(0); -} diff --git a/tests-build/tests/pass/forward_args_and_output.rs b/tests-build/tests/pass/forward_args_and_output.rs deleted file mode 100644 index e6ef1f88c..000000000 --- a/tests-build/tests/pass/forward_args_and_output.rs +++ /dev/null @@ -1,13 +0,0 @@ -use tests_build::tokio; - -fn main() {} - -// arguments and output type is forwarded so other macros can access them - -#[tokio::test] -async fn test_fn_has_args(_x: u8) {} - -#[tokio::test] -async fn test_has_output() -> Result<(), Box> { - Ok(()) -} diff --git a/tests-build/tests/pass/macros_main_loop.rs b/tests-build/tests/pass/macros_main_loop.rs deleted file mode 100644 index d7d51982c..000000000 --- a/tests-build/tests/pass/macros_main_loop.rs +++ /dev/null @@ -1,14 +0,0 @@ -use tests_build::tokio; - -#[tokio::main] -async fn main() -> Result<(), ()> { - loop { - if !never() { - return Ok(()); - } - } -} - -fn never() -> bool { - std::time::Instant::now() > std::time::Instant::now() -} diff --git a/tests-build/tests/pass/macros_main_return.rs b/tests-build/tests/pass/macros_main_return.rs deleted file mode 100644 index d4d34ec26..000000000 --- a/tests-build/tests/pass/macros_main_return.rs +++ /dev/null @@ -1,6 +0,0 @@ -use tests_build::tokio; - -#[tokio::main] -async fn main() -> Result<(), ()> { - return Ok(()); -} diff --git a/tokio/src/time/driver/sleep.rs b/tokio/src/time/driver/sleep.rs index 43ff694ff..c0571ca2a 100644 --- a/tokio/src/time/driver/sleep.rs +++ b/tokio/src/time/driver/sleep.rs @@ -324,8 +324,8 @@ impl Sleep { } fn reset_inner(self: Pin<&mut Self>, deadline: Instant) { - let me = self.project(); - me.entry.reset(deadline); + let mut me = self.project(); + me.entry.as_mut().reset(deadline); (*me.inner).deadline = deadline; #[cfg(all(tokio_unstable, feature = "tracing"))] @@ -349,12 +349,12 @@ impl Sleep { cfg_not_trace! { fn poll_elapsed(self: Pin<&mut Self>, cx: &mut task::Context<'_>) -> Poll> { - let me = self.project(); + let mut me = self.project(); // Keep track of task budget let coop = ready!(crate::coop::poll_proceed(cx)); - me.entry.poll_elapsed(cx).map(move |r| { + me.entry.as_mut().poll_elapsed(cx).map(move |r| { coop.made_progress(); r }) @@ -363,7 +363,7 @@ impl Sleep { cfg_trace! { fn poll_elapsed(self: Pin<&mut Self>, cx: &mut task::Context<'_>) -> Poll> { - let me = self.project(); + let mut me = self.project(); // Keep track of task budget let coop = ready!(trace_poll_op!( "poll_elapsed", @@ -371,7 +371,7 @@ impl Sleep { me.inner.resource_span.id(), )); - let result = me.entry.poll_elapsed(cx).map(move |r| { + let result = me.entry.as_mut().poll_elapsed(cx).map(move |r| { coop.made_progress(); r });