Upgrade rust/crates/async-trait to 0.1.51 am: aa9cbeb7d8 am: 5f7f810f74

Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/async-trait/+/1790987

Change-Id: Ie2a2e6cb3c6f52c633592b56d08078d62f3c6193
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index d7f5c7b..13458f0 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "651ddc1131325b08c1b76ae6b65c1f23ca4cf7cf"
+    "sha1": "a976397bfb05bc0e46daf37165952adb47f0c1f1"
   }
 }
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 4c3d289..9ee381c 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.42.0]
         include:
           - rust: nightly
             rustflags: --cfg async_trait_nightly_testing
diff --git a/Android.bp b/Android.bp
index 22a10c5..702b974 100644
--- a/Android.bp
+++ b/Android.bp
@@ -50,7 +50,7 @@
 }
 
 // dependent_library ["feature_list"]
-//   proc-macro2-1.0.26 "default,proc-macro"
+//   proc-macro2-1.0.28 "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"
+//   syn-1.0.74 "clone-impls,default,derive,extra-traits,full,parsing,printing,proc-macro,quote,visit,visit-mut"
+//   unicode-xid-0.2.2 "default"
diff --git a/Cargo.toml b/Cargo.toml
index e97aafa..2673f52 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -3,17 +3,16 @@
 # 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"
 name = "async-trait"
-version = "0.1.50"
+version = "0.1.51"
 authors = ["David Tolnay <[email protected]>"]
 description = "Type erasure for async trait methods"
 documentation = "https://docs.rs/async-trait"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index 8af0b3b..45c933c 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@
 [package]
 name = "async-trait"
-version = "0.1.50"
+version = "0.1.51"
 authors = ["David Tolnay <[email protected]>"]
 edition = "2018"
 license = "MIT OR Apache-2.0"
diff --git a/METADATA b/METADATA
index 4f74759..bd3c14f 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.51.crate"
   }
-  version: "0.1.50"
+  version: "0.1.51"
   license_type: NOTICE
   last_upgrade_date {
     year: 2021
-    month: 4
-    day: 21
+    month: 8
+    day: 9
   }
 }
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/src/expand.rs b/src/expand.rs
index e78c6c4..3ae9eea 100644
--- a/src/expand.rs
+++ b/src/expand.rs
@@ -396,7 +396,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..348f3f9 100644
--- a/tests/test.rs
+++ b/tests/test.rs
@@ -1,12 +1,14 @@
 #![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::needless_return,
+    clippy::trivially_copy_pass_by_ref,
+    clippy::unused_async
 )]
 
 use async_trait::async_trait;
@@ -1331,7 +1333,7 @@
     #[async_trait]
     pub trait Trait {
         async fn f(&self) {
-            self::f()
+            self::f();
         }
     }
 }
@@ -1361,3 +1363,16 @@
         }
     }
 }
+
+// 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) {}
+}
diff --git a/tests/ui/bare-trait-object.stderr b/tests/ui/bare-trait-object.stderr
index 98cf679..f6374eb 100644
--- a/tests/ui/bare-trait-object.stderr
+++ b/tests/ui/bare-trait-object.stderr
@@ -9,3 +9,5 @@
    |
 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 issue #80165 <https://github.com/rust-lang/rust/issues/80165>
diff --git a/tests/ui/lifetime-span.stderr b/tests/ui/lifetime-span.stderr
index feae87f..ddfb267 100644
--- a/tests/ui/lifetime-span.stderr
+++ b/tests/ui/lifetime-span.stderr
@@ -3,6 +3,8 @@
    |
 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