Snap for 8564071 from 1c2c0f9edc2fddd036b49c23edb1f81f29ecd021 to mainline-extservices-release Change-Id: I8072871f0ea857d7b945e3640f9690090d62479f
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json index d7f5c7b..71c36c5 100644 --- a/.cargo_vcs_info.json +++ b/.cargo_vcs_info.json
@@ -1,5 +1,6 @@ { "git": { - "sha1": "651ddc1131325b08c1b76ae6b65c1f23ca4cf7cf" - } -} + "sha1": "20bd296e0d646e2b14626b7078e045254bed26ee" + }, + "path_in_vcs": "" +} \ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4c3d289..7c80abc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml
@@ -12,7 +12,7 @@ strategy: fail-fast: false matrix: - rust: [beta, stable, 1.40.0] + rust: [beta, stable, 1.45.0] include: - rust: nightly rustflags: --cfg async_trait_nightly_testing @@ -36,7 +36,17 @@ clippy: name: Clippy runs-on: ubuntu-latest + if: github.event_name != 'pull_request' steps: - uses: actions/checkout@v2 - uses: dtolnay/rust-toolchain@clippy - run: cargo clippy --tests -- -Dclippy::all -Dclippy::pedantic + + outdated: + name: Outdated + runs-on: ubuntu-latest + if: github.event_name != 'pull_request' + steps: + - uses: actions/checkout@v2 + - uses: dtolnay/install@cargo-outdated + - run: cargo outdated --exit-code 1
diff --git a/Android.bp b/Android.bp index 22a10c5..09676ac 100644 --- a/Android.bp +++ b/Android.bp
@@ -1,4 +1,4 @@ -// This file is generated by cargo2android.py --run --device --dependencies. +// This file is generated by cargo2android.py --config cargo2android.json. // Do not modify this file as changes will be overridden on upgrade. package { @@ -40,6 +40,8 @@ rust_proc_macro { name: "libasync_trait", crate_name: "async_trait", + cargo_env_compat: true, + cargo_pkg_version: "0.1.52", srcs: ["src/lib.rs"], edition: "2018", rustlibs: [ @@ -48,9 +50,3 @@ "libsyn", ], } - -// dependent_library ["feature_list"] -// proc-macro2-1.0.26 "default,proc-macro" -// quote-1.0.9 "default,proc-macro" -// syn-1.0.69 "clone-impls,default,derive,extra-traits,full,parsing,printing,proc-macro,quote,visit,visit-mut" -// unicode-xid-0.2.1 "default"
diff --git a/Cargo.toml b/Cargo.toml index e97aafa..d09788d 100644 --- a/Cargo.toml +++ b/Cargo.toml
@@ -3,17 +3,17 @@ # When uploading crates to the registry Cargo will automatically # "normalize" Cargo.toml files for maximal compatibility # with all versions of Cargo and also rewrite `path` dependencies -# to registry (e.g., crates.io) dependencies +# to registry (e.g., crates.io) dependencies. # -# If you believe there's an error in this file please file an -# issue against the rust-lang/cargo repository. If you're -# editing this file be aware that the upstream Cargo.toml -# will likely look very different (and much more reasonable) +# If you are reading this file be aware that the original Cargo.toml +# will likely look very different (and much more reasonable). +# See Cargo.toml.orig for the original contents. [package] edition = "2018" +rust-version = "1.39" name = "async-trait" -version = "0.1.50" +version = "0.1.52" authors = ["David Tolnay <[email protected]>"] description = "Type erasure for async trait methods" documentation = "https://docs.rs/async-trait" @@ -48,5 +48,5 @@ version = "0.1.14" [dev-dependencies.trybuild] -version = "1.0.19" +version = "1.0.49" features = ["diff"]
diff --git a/Cargo.toml.orig b/Cargo.toml.orig index 8af0b3b..c340ced 100644 --- a/Cargo.toml.orig +++ b/Cargo.toml.orig
@@ -1,8 +1,9 @@ [package] name = "async-trait" -version = "0.1.50" +version = "0.1.52" authors = ["David Tolnay <[email protected]>"] edition = "2018" +rust-version = "1.39" license = "MIT OR Apache-2.0" description = "Type erasure for async trait methods" repository = "https://github.com/dtolnay/async-trait" @@ -23,7 +24,7 @@ rustversion = "1.0" tracing = "0.1.14" tracing-attributes = "0.1.14" -trybuild = { version = "1.0.19", features = ["diff"] } +trybuild = { version = "1.0.49", features = ["diff"] } [package.metadata.docs.rs] targets = ["x86_64-unknown-linux-gnu"]
diff --git a/METADATA b/METADATA index 4f74759..5da1fec 100644 --- a/METADATA +++ b/METADATA
@@ -7,13 +7,13 @@ } url { type: ARCHIVE - value: "https://static.crates.io/crates/async-trait/async-trait-0.1.50.crate" + value: "https://static.crates.io/crates/async-trait/async-trait-0.1.52.crate" } - version: "0.1.50" + version: "0.1.52" license_type: NOTICE last_upgrade_date { - year: 2021 - month: 4 - day: 21 + year: 2022 + month: 3 + day: 1 } }
diff --git a/README.md b/README.md index c393c10..4753f50 100644 --- a/README.md +++ b/README.md
@@ -217,7 +217,7 @@ For traits that need to be object safe and need to have default implementations for some async methods, there are two resolutions. Either you can add Send and/or Sync as supertraits (Send if there are `&mut self` methods with default -implementations, Sync if there are `&self` methods with default implementions) +implementations, Sync if there are `&self` methods with default implementations) to constrain all implementors of the trait such that the default implementations are applicable to them:
diff --git a/TEST_MAPPING b/TEST_MAPPING index 0f4f93c..396e4da 100644 --- a/TEST_MAPPING +++ b/TEST_MAPPING
@@ -2,7 +2,78 @@ { "presubmit": [ { + "name": "ZipFuseTest" + }, + { "name": "authfs_device_test_src_lib" + }, + { + "name": "diced_open_dice_cbor_test" + }, + { + "name": "diced_sample_inputs_test" + }, + { + "name": "diced_test" + }, + { + "name": "diced_utils_test" + }, + { + "name": "diced_vendor_test" + }, + { + "name": "keystore2_km_compat_test" + }, + { + "name": "keystore2_test" + }, + { + "name": "legacykeystore_test" + }, + { + "name": "microdroid_manager_test" + }, + { + "name": "virtualizationservice_device_test" + } + ], + "presubmit-rust": [ + { + "name": "ZipFuseTest" + }, + { + "name": "authfs_device_test_src_lib" + }, + { + "name": "diced_open_dice_cbor_test" + }, + { + "name": "diced_sample_inputs_test" + }, + { + "name": "diced_test" + }, + { + "name": "diced_utils_test" + }, + { + "name": "diced_vendor_test" + }, + { + "name": "keystore2_km_compat_test" + }, + { + "name": "keystore2_test" + }, + { + "name": "legacykeystore_test" + }, + { + "name": "microdroid_manager_test" + }, + { + "name": "virtualizationservice_device_test" } ] }
diff --git a/cargo2android.json b/cargo2android.json new file mode 100644 index 0000000..bf78496 --- /dev/null +++ b/cargo2android.json
@@ -0,0 +1,4 @@ +{ + "device": true, + "run": true +} \ No newline at end of file
diff --git a/src/expand.rs b/src/expand.rs index e78c6c4..2f4697a 100644 --- a/src/expand.rs +++ b/src/expand.rs
@@ -125,6 +125,8 @@ parse_quote! { #[allow( clippy::let_unit_value, + clippy::no_effect_underscore_binding, + clippy::shadow_same, clippy::type_complexity, clippy::type_repetition_in_bounds, clippy::used_underscore_binding @@ -396,7 +398,13 @@ fn has_bound(supertraits: &Supertraits, marker: &Ident) -> bool { for bound in supertraits { if let TypeParamBound::Trait(bound) = bound { - if bound.path.is_ident(marker) { + if bound.path.is_ident(marker) + || bound.path.segments.len() == 3 + && (bound.path.segments[0].ident == "std" + || bound.path.segments[0].ident == "core") + && bound.path.segments[1].ident == "marker" + && bound.path.segments[2].ident == *marker + { return true; } }
diff --git a/src/lib.rs b/src/lib.rs index 100bee6..3ae002a 100644 --- a/src/lib.rs +++ b/src/lib.rs
@@ -259,7 +259,7 @@ //! implementations for some async methods, there are two resolutions. Either //! you can add Send and/or Sync as supertraits (Send if there are `&mut self` //! methods with default implementations, Sync if there are `&self` methods with -//! default implementions) to constrain all implementors of the trait such that +//! default implementations) to constrain all implementors of the trait such that //! the default implementations are applicable to them: //! //! ```
diff --git a/src/receiver.rs b/src/receiver.rs index f6ea327..2230db6 100644 --- a/src/receiver.rs +++ b/src/receiver.rs
@@ -161,7 +161,7 @@ if i.mac.path.is_ident("macro_rules") || i.mac.path.segments.last().unwrap().ident == "select" { - self.visit_macro_mut(&mut i.mac) + self.visit_macro_mut(&mut i.mac); } } }
diff --git a/tests/test.rs b/tests/test.rs index 6f95576..2bca1fc 100644 --- a/tests/test.rs +++ b/tests/test.rs
@@ -1,12 +1,15 @@ #![cfg_attr( async_trait_nightly_testing, - feature(min_specialization, min_type_alias_impl_trait) + feature(min_specialization, type_alias_impl_trait) )] #![allow( clippy::let_underscore_drop, clippy::let_unit_value, clippy::missing_panics_doc, - clippy::trivially_copy_pass_by_ref + clippy::missing_safety_doc, + clippy::needless_return, + clippy::trivially_copy_pass_by_ref, + clippy::unused_async )] use async_trait::async_trait; @@ -1331,7 +1334,7 @@ #[async_trait] pub trait Trait { async fn f(&self) { - self::f() + self::f(); } } } @@ -1361,3 +1364,28 @@ } } } + +// https://github.com/dtolnay/async-trait/issues/169 +#[deny(where_clauses_object_safety)] +pub mod issue169 { + use async_trait::async_trait; + + #[async_trait] + pub trait Trait: ::core::marker::Sync { + async fn f(&self) {} + } + + pub fn test(_t: &dyn Trait) {} +} + +// https://github.com/dtolnay/async-trait/issues/183 +pub mod issue183 { + #![deny(clippy::shadow_same)] + + use async_trait::async_trait; + + #[async_trait] + trait Foo { + async fn foo(_n: i32) {} + } +}
diff --git a/tests/ui/bare-trait-object.stderr b/tests/ui/bare-trait-object.stderr index 98cf679..6670c48 100644 --- a/tests/ui/bare-trait-object.stderr +++ b/tests/ui/bare-trait-object.stderr
@@ -1,11 +1,13 @@ error: trait objects without an explicit `dyn` are deprecated - --> $DIR/bare-trait-object.rs:11:16 + --> tests/ui/bare-trait-object.rs:11:16 | 11 | impl Trait for Send + Sync { | ^^^^^^^^^^^ help: use `dyn`: `dyn Send + Sync` | note: the lint level is defined here - --> $DIR/bare-trait-object.rs:1:9 + --> tests/ui/bare-trait-object.rs:1:9 | 1 | #![deny(bare_trait_objects)] | ^^^^^^^^^^^^^^^^^^ + = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! + = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
diff --git a/tests/ui/delimiter-span.stderr b/tests/ui/delimiter-span.stderr index 6120262..a13985d 100644 --- a/tests/ui/delimiter-span.stderr +++ b/tests/ui/delimiter-span.stderr
@@ -1,5 +1,5 @@ error: no rules expected the token `{` - --> $DIR/delimiter-span.rs:17:16 + --> tests/ui/delimiter-span.rs:17:16 | 3 | macro_rules! picky { | ------------------ when calling this macro @@ -8,7 +8,7 @@ | ^ no rules expected this token in macro call error: no rules expected the token `{` - --> $DIR/delimiter-span.rs:18:16 + --> tests/ui/delimiter-span.rs:18:16 | 3 | macro_rules! picky { | ------------------ when calling this macro
diff --git a/tests/ui/lifetime-span.stderr b/tests/ui/lifetime-span.stderr index feae87f..aad25a7 100644 --- a/tests/ui/lifetime-span.stderr +++ b/tests/ui/lifetime-span.stderr
@@ -1,11 +1,13 @@ error[E0726]: implicit elided lifetime not allowed here - --> $DIR/lifetime-span.rs:12:6 + --> tests/ui/lifetime-span.rs:12:6 | 12 | impl Trait for A { | ^^^^^- help: indicate the anonymous lifetime: `<'_>` + | + = note: assuming a `'static` lifetime... error[E0107]: this trait takes 0 lifetime arguments but 1 lifetime argument was supplied - --> $DIR/lifetime-span.rs:32:10 + --> tests/ui/lifetime-span.rs:32:10 | 32 | impl<'r> Trait2<'r> for B { | ^^^^^^---- help: remove these generics @@ -13,13 +15,13 @@ | expected 0 lifetime arguments | note: trait defined here, with 0 lifetime parameters - --> $DIR/lifetime-span.rs:22:11 + --> tests/ui/lifetime-span.rs:22:11 | 22 | pub trait Trait2 { | ^^^^^^ error[E0195]: lifetime parameters or bounds on method `method` do not match the trait declaration - --> $DIR/lifetime-span.rs:13:14 + --> tests/ui/lifetime-span.rs:13:14 | 8 | async fn method(&'r self); | ---------------- lifetimes in impl do not match this method in trait @@ -28,7 +30,7 @@ | ^^^^^^^^^^^^^ lifetimes do not match method in trait error[E0195]: lifetime parameters or bounds on method `method` do not match the trait declaration - --> $DIR/lifetime-span.rs:18:14 + --> tests/ui/lifetime-span.rs:18:14 | 8 | async fn method(&'r self); | ---------------- lifetimes in impl do not match this method in trait @@ -37,7 +39,7 @@ | ^^^^^^^^^^^^^ lifetimes do not match method in trait error[E0195]: lifetime parameters or bounds on method `method` do not match the trait declaration - --> $DIR/lifetime-span.rs:33:14 + --> tests/ui/lifetime-span.rs:33:14 | 23 | async fn method<'r>(&'r self); | ---- lifetimes in impl do not match this method in trait
diff --git a/tests/ui/missing-async-in-impl.rs b/tests/ui/missing-async-in-impl.rs new file mode 100644 index 0000000..3a5f58c --- /dev/null +++ b/tests/ui/missing-async-in-impl.rs
@@ -0,0 +1,15 @@ +use async_trait::async_trait; + +#[async_trait] +pub trait Trait { + async fn method(); +} + +pub struct Struct; + +#[async_trait] +impl Trait for Struct { + fn method() {} +} + +fn main() {}
diff --git a/tests/ui/missing-async-in-impl.stderr b/tests/ui/missing-async-in-impl.stderr new file mode 100644 index 0000000..e461c85 --- /dev/null +++ b/tests/ui/missing-async-in-impl.stderr
@@ -0,0 +1,8 @@ +error[E0195]: lifetime parameters or bounds on method `method` do not match the trait declaration + --> tests/ui/missing-async-in-impl.rs:12:14 + | +5 | async fn method(); + | -------- lifetimes in impl do not match this method in trait +... +12 | fn method() {} + | ^ lifetimes do not match method in trait
diff --git a/tests/ui/missing-async-in-trait.rs b/tests/ui/missing-async-in-trait.rs new file mode 100644 index 0000000..56fea7a --- /dev/null +++ b/tests/ui/missing-async-in-trait.rs
@@ -0,0 +1,15 @@ +use async_trait::async_trait; + +#[async_trait] +pub trait Trait { + fn method(); +} + +pub struct Struct; + +#[async_trait] +impl Trait for Struct { + async fn method() {} +} + +fn main() {}
diff --git a/tests/ui/missing-async-in-trait.stderr b/tests/ui/missing-async-in-trait.stderr new file mode 100644 index 0000000..c92c38d --- /dev/null +++ b/tests/ui/missing-async-in-trait.stderr
@@ -0,0 +1,8 @@ +error[E0195]: lifetime parameters or bounds on method `method` do not match the trait declaration + --> tests/ui/missing-async-in-trait.rs:12:14 + | +5 | fn method(); + | - lifetimes in impl do not match this method in trait +... +12 | async fn method() {} + | ^^^^^^^^ lifetimes do not match method in trait
diff --git a/tests/ui/missing-body.stderr b/tests/ui/missing-body.stderr index 2d9b09c..e6ddb42 100644 --- a/tests/ui/missing-body.stderr +++ b/tests/ui/missing-body.stderr
@@ -1,5 +1,5 @@ error: associated function in `impl` without body - --> $DIR/missing-body.rs:12:5 + --> tests/ui/missing-body.rs:12:5 | 12 | async fn f(&self); | ^^^^^^^^^^^^^^^^^-
diff --git a/tests/ui/must-use.stderr b/tests/ui/must-use.stderr index c09a51e..1b97055 100644 --- a/tests/ui/must-use.stderr +++ b/tests/ui/must-use.stderr
@@ -1,11 +1,11 @@ error: unused return value of `Interface::f` that must be used - --> $DIR/must-use.rs:18:5 + --> tests/ui/must-use.rs:18:5 | 18 | Thing.f(); | ^^^^^^^^^^ | note: the lint level is defined here - --> $DIR/must-use.rs:1:9 + --> tests/ui/must-use.rs:1:9 | 1 | #![deny(unused_must_use)] | ^^^^^^^^^^^^^^^
diff --git a/tests/ui/self-span.stderr b/tests/ui/self-span.stderr index 9ea1bbe..2690791 100644 --- a/tests/ui/self-span.stderr +++ b/tests/ui/self-span.stderr
@@ -1,5 +1,5 @@ error[E0308]: mismatched types - --> $DIR/self-span.rs:17:21 + --> tests/ui/self-span.rs:17:21 | 17 | let _: () = self; | -- ^^^^ expected `()`, found struct `S` @@ -7,13 +7,13 @@ | expected due to this error: the `Self` constructor can only be used with tuple or unit structs - --> $DIR/self-span.rs:18:23 + --> tests/ui/self-span.rs:18:23 | 18 | let _: Self = Self; | ^^^^ help: use curly brackets: `Self { /* fields */ }` error[E0308]: mismatched types - --> $DIR/self-span.rs:25:21 + --> tests/ui/self-span.rs:25:21 | 25 | let _: () = self; | -- ^^^^ expected `()`, found enum `E` @@ -21,7 +21,7 @@ | expected due to this error[E0533]: expected unit struct, unit variant or constant, found struct variant `Self::V` - --> $DIR/self-span.rs:26:23 + --> tests/ui/self-span.rs:26:23 | 26 | let _: Self = Self::V; | ^^^^^^^
diff --git a/tests/ui/send-not-implemented.stderr b/tests/ui/send-not-implemented.stderr index 473a31b..8004de6 100644 --- a/tests/ui/send-not-implemented.stderr +++ b/tests/ui/send-not-implemented.stderr
@@ -1,5 +1,5 @@ error: future cannot be sent between threads safely - --> $DIR/send-not-implemented.rs:8:26 + --> tests/ui/send-not-implemented.rs:8:26 | 8 | async fn test(&self) { | __________________________^ @@ -9,9 +9,9 @@ 12 | | } | |_____^ future created by async block is not `Send` | - = help: within `impl Future`, the trait `Send` is not implemented for `MutexGuard<'_, ()>` + = help: within `impl Future<Output = [async output]>`, the trait `Send` is not implemented for `MutexGuard<'_, ()>` note: future is not `Send` as this value is used across an await - --> $DIR/send-not-implemented.rs:11:9 + --> tests/ui/send-not-implemented.rs:11:9 | 10 | let _guard = mutex.lock().unwrap(); | ------ has type `MutexGuard<'_, ()>` which is not `Send` @@ -22,7 +22,7 @@ = note: required for the cast to the object type `dyn Future<Output = ()> + Send` error: future cannot be sent between threads safely - --> $DIR/send-not-implemented.rs:14:38 + --> tests/ui/send-not-implemented.rs:14:38 | 14 | async fn test_ret(&self) -> bool { | ______________________________________^ @@ -33,9 +33,9 @@ 19 | | } | |_____^ future created by async block is not `Send` | - = help: within `impl Future`, the trait `Send` is not implemented for `MutexGuard<'_, ()>` + = help: within `impl Future<Output = [async output]>`, the trait `Send` is not implemented for `MutexGuard<'_, ()>` note: future is not `Send` as this value is used across an await - --> $DIR/send-not-implemented.rs:17:9 + --> tests/ui/send-not-implemented.rs:17:9 | 16 | let _guard = mutex.lock().unwrap(); | ------ has type `MutexGuard<'_, ()>` which is not `Send`
diff --git a/tests/ui/unreachable.rs b/tests/ui/unreachable.rs index f546a58..cac2826 100644 --- a/tests/ui/unreachable.rs +++ b/tests/ui/unreachable.rs
@@ -12,8 +12,8 @@ #[async_trait] pub trait TraitFoo { async fn f() { - let y = unimplemented!(); - let z = y; + let _y = unimplemented!(); + let _z = _y; } }
diff --git a/tests/ui/unreachable.stderr b/tests/ui/unreachable.stderr index 0b74692..08595e5 100644 --- a/tests/ui/unreachable.stderr +++ b/tests/ui/unreachable.stderr
@@ -1,13 +1,13 @@ error: unreachable statement - --> $DIR/unreachable.rs:16:9 + --> tests/ui/unreachable.rs:16:9 | -15 | let y = unimplemented!(); - | ---------------- any code following this expression is unreachable -16 | let z = y; - | ^^^^^^^^^^ unreachable statement +15 | let _y = unimplemented!(); + | ---------------- any code following this expression is unreachable +16 | let _z = _y; + | ^^^^^^^^^^^^ unreachable statement | note: the lint level is defined here - --> $DIR/unreachable.rs:1:9 + --> tests/ui/unreachable.rs:1:9 | 1 | #![deny(warnings)] | ^^^^^^^^
diff --git a/tests/ui/unsupported-self.stderr b/tests/ui/unsupported-self.stderr index c98807e..1493945 100644 --- a/tests/ui/unsupported-self.stderr +++ b/tests/ui/unsupported-self.stderr
@@ -1,5 +1,5 @@ error: the `Self` constructor can only be used with tuple or unit structs - --> $DIR/unsupported-self.rs:11:17 + --> tests/ui/unsupported-self.rs:11:17 | 11 | let _ = Self; | ^^^^