diff --git a/examples/a-chat/server.rs b/examples/a-chat/server.rs
index e049a490e..d3ac74699 100644
--- a/examples/a-chat/server.rs
+++ b/examples/a-chat/server.rs
@@ -96,6 +96,7 @@ async fn connection_writer_loop(
                 None => break,
             },
             void = shutdown.next().fuse() => match void {
+                #[allow(unreachable_patterns)]
                 Some(void) => match void {},
                 None => break,
             }
diff --git a/src/future/future/mod.rs b/src/future/future/mod.rs
index 47187b235..12a62225f 100644
--- a/src/future/future/mod.rs
+++ b/src/future/future/mod.rs
@@ -27,6 +27,7 @@ pub use core::future::Future as Future;
 
     [`Future`]: ../future/trait.Future.html
 "#]
+#[cfg(any(feature = "default", feature = "unstable", feature = "docs"))]
 pub trait FutureExt: Future {
     /// Returns a Future that delays execution for a specified time.
     ///
@@ -284,5 +285,6 @@ pub trait FutureExt: Future {
     }
 }
 
+#[cfg(any(feature = "default", feature = "unstable", feature = "docs"))]
 impl<T: Future + ?Sized> FutureExt for T {}
 
diff --git a/src/io/buf_writer.rs b/src/io/buf_writer.rs
index c972937fd..230954e88 100644
--- a/src/io/buf_writer.rs
+++ b/src/io/buf_writer.rs
@@ -114,7 +114,7 @@ pin_project! {
 /// # Ok(()) }) }
 ///```
 #[derive(Debug)]
-pub struct IntoInnerError<W>(W, crate::io::Error);
+pub struct IntoInnerError<W>(W, #[allow(dead_code)] crate::io::Error);
 
 impl<W: Write> BufWriter<W> {
     /// Creates a new `BufWriter` with a default buffer capacity. The default is currently 8 KB,
diff --git a/src/io/read/bytes.rs b/src/io/read/bytes.rs
index ab9259611..fed24ac2a 100644
--- a/src/io/read/bytes.rs
+++ b/src/io/read/bytes.rs
@@ -32,7 +32,7 @@ impl<T: Read + Unpin> Stream for Bytes<T> {
     }
 }
 
-#[cfg(all(test, default))]
+#[cfg(all(test, feature = "default"))]
 mod tests {
     use crate::io;
     use crate::prelude::*;
diff --git a/src/io/read/chain.rs b/src/io/read/chain.rs
index 4fcdb0ec9..ff159cc80 100644
--- a/src/io/read/chain.rs
+++ b/src/io/read/chain.rs
@@ -165,7 +165,7 @@ impl<T: BufRead, U: BufRead> BufRead for Chain<T, U> {
     }
 }
 
-#[cfg(all(test, default))]
+#[cfg(all(test, feature = "default"))]
 mod tests {
     use crate::io;
     use crate::prelude::*;
diff --git a/src/io/stdin.rs b/src/io/stdin.rs
index b994bcd07..b11d2642a 100644
--- a/src/io/stdin.rs
+++ b/src/io/stdin.rs
@@ -230,11 +230,11 @@ cfg_windows! {
     }
 
     cfg_io_safety! {
-        use crate::os::unix::io::{AsFd, BorrowedFd};
+        use crate::os::windows::io::{AsHandle, BorrowedHandle};
 
-        impl AsFd for Stdin {
-            fn as_fd(&self) -> BorrowedFd<'_> {
-                std::io::stdin().as_fd()
+        impl AsHandle for Stdin {
+            fn as_handle(&self) -> BorrowedHandle<'_> {
+                std::io::stdin().as_handle()
             }
         }
     }
diff --git a/src/lib.rs b/src/lib.rs
index 86786e814..493219c44 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -284,6 +284,7 @@
 #![doc(test(attr(allow(unused_extern_crates, unused_variables))))]
 #![doc(html_logo_url = "https://async.rs/images/logo--hero.svg")]
 
+#[cfg(any(feature = "unstable", feature = "default"))]
 extern crate alloc;
 
 #[macro_use]
diff --git a/src/utils.rs b/src/utils.rs
index 853ace0e9..eec3f1217 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -1,5 +1,3 @@
-use alloc::string::String;
-
 /// Calls a function and aborts if it panics.
 ///
 /// This is useful in unsafe code where we can't recover from panics.
@@ -55,8 +53,9 @@ pub fn random(n: u32) -> u32 {
 }
 
 /// Add additional context to errors
+#[cfg(any(feature = "unstable", feature = "default"))]
 pub(crate) trait Context {
-    fn context(self, message: impl Fn() -> String) -> Self;
+    fn context(self, message: impl Fn() -> alloc::string::String) -> Self;
 }
 
 #[cfg(all(
@@ -148,7 +147,7 @@ macro_rules! cfg_unstable_default {
     ($($item:item)*) => {
         $(
             #[cfg(all(feature = "default", feature = "unstable"))]
-            #[cfg_attr(feature = "docs", doc(unstable))]
+            #[cfg_attr(feature = "docs", doc(cfg(unstable)))]
             $item
         )*
     }
@@ -161,7 +160,6 @@ macro_rules! cfg_unix {
     ($($item:item)*) => {
         $(
             #[cfg(any(unix, feature = "docs"))]
-            #[cfg_attr(feature = "docs", doc(cfg(unix)))]
             $item
         )*
     }
@@ -174,7 +172,6 @@ macro_rules! cfg_windows {
     ($($item:item)*) => {
         $(
             #[cfg(any(windows, feature = "docs"))]
-            #[cfg_attr(feature = "docs", doc(cfg(windows)))]
             $item
         )*
     }