diff --git a/embassy-boot/boot/src/lib.rs b/embassy-boot/boot/src/lib.rs
index 8eb3ba96d..4521fecb0 100644
--- a/embassy-boot/boot/src/lib.rs
+++ b/embassy-boot/boot/src/lib.rs
@@ -1,5 +1,4 @@
 #![cfg_attr(feature = "nightly", feature(async_fn_in_trait))]
-#![allow(incomplete_features)]
 #![no_std]
 #![warn(missing_docs)]
 #![doc = include_str!("../README.md")]
diff --git a/embassy-embedded-hal/src/lib.rs b/embassy-embedded-hal/src/lib.rs
index a783151e4..73c81b465 100644
--- a/embassy-embedded-hal/src/lib.rs
+++ b/embassy-embedded-hal/src/lib.rs
@@ -1,6 +1,5 @@
 #![cfg_attr(not(feature = "std"), no_std)]
 #![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections, try_blocks))]
-#![cfg_attr(feature = "nightly", allow(incomplete_features))]
 #![warn(missing_docs)]
 
 //! Utilities to use `embedded-hal` traits with Embassy.
diff --git a/embassy-lora/src/lib.rs b/embassy-lora/src/lib.rs
index 3facee6f3..c23d1d0dd 100644
--- a/embassy-lora/src/lib.rs
+++ b/embassy-lora/src/lib.rs
@@ -1,6 +1,5 @@
 #![no_std]
 #![feature(async_fn_in_trait, impl_trait_projections)]
-#![allow(incomplete_features)]
 //! embassy-lora holds LoRa-specific functionality.
 
 pub(crate) mod fmt;
diff --git a/embassy-net/src/lib.rs b/embassy-net/src/lib.rs
index 9487c0913..bccbad521 100644
--- a/embassy-net/src/lib.rs
+++ b/embassy-net/src/lib.rs
@@ -1,6 +1,5 @@
 #![cfg_attr(not(feature = "std"), no_std)]
 #![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
-#![cfg_attr(feature = "nightly", allow(incomplete_features))]
 #![warn(missing_docs)]
 #![doc = include_str!("../README.md")]
 
diff --git a/embassy-nrf/src/lib.rs b/embassy-nrf/src/lib.rs
index 7c60b32b2..d4d7a1cad 100644
--- a/embassy-nrf/src/lib.rs
+++ b/embassy-nrf/src/lib.rs
@@ -1,6 +1,5 @@
 #![no_std]
 #![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
-#![cfg_attr(feature = "nightly", allow(incomplete_features))]
 #![doc = include_str!("../README.md")]
 #![warn(missing_docs)]
 
diff --git a/embassy-nrf/src/uarte.rs b/embassy-nrf/src/uarte.rs
index 586c88b2d..032089635 100644
--- a/embassy-nrf/src/uarte.rs
+++ b/embassy-nrf/src/uarte.rs
@@ -791,20 +791,18 @@ impl<'d, T: Instance, U: TimerInstance> UarteRxWithIdle<'d, T, U> {
     }
 }
 
-#[cfg(not(any(feature = "_nrf9160", feature = "nrf5340")))]
+#[cfg(not(any(feature = "_nrf9160", feature = "_nrf5340")))]
 pub(crate) fn apply_workaround_for_enable_anomaly(_r: &crate::pac::uarte0::RegisterBlock) {
     // Do nothing
 }
 
-#[cfg(any(feature = "_nrf9160", feature = "nrf5340"))]
+#[cfg(any(feature = "_nrf9160", feature = "_nrf5340"))]
 pub(crate) fn apply_workaround_for_enable_anomaly(r: &crate::pac::uarte0::RegisterBlock) {
-    use core::ops::Deref;
-
     // Apply workaround for anomalies:
     // - nRF9160 - anomaly 23
     // - nRF5340 - anomaly 44
-    let rxenable_reg: *const u32 = ((r.deref() as *const _ as usize) + 0x564) as *const u32;
-    let txenable_reg: *const u32 = ((r.deref() as *const _ as usize) + 0x568) as *const u32;
+    let rxenable_reg: *const u32 = ((r as *const _ as usize) + 0x564) as *const u32;
+    let txenable_reg: *const u32 = ((r as *const _ as usize) + 0x568) as *const u32;
 
     // NB Safety: This is taken from Nordic's driver -
     // https://github.com/NordicSemiconductor/nrfx/blob/master/drivers/src/nrfx_uarte.c#L197
diff --git a/embassy-rp/src/lib.rs b/embassy-rp/src/lib.rs
index 980ebe7f4..4e4542d70 100644
--- a/embassy-rp/src/lib.rs
+++ b/embassy-rp/src/lib.rs
@@ -1,6 +1,5 @@
 #![no_std]
 #![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
-#![cfg_attr(feature = "nightly", allow(incomplete_features))]
 
 // This mod MUST go first, so that the others see its macros.
 pub(crate) mod fmt;
diff --git a/embassy-stm32/src/lib.rs b/embassy-stm32/src/lib.rs
index 3283c4062..1920e2642 100644
--- a/embassy-stm32/src/lib.rs
+++ b/embassy-stm32/src/lib.rs
@@ -1,6 +1,5 @@
 #![no_std]
 #![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
-#![cfg_attr(feature = "nightly", allow(incomplete_features))]
 
 // This must go FIRST so that all the other modules see its macros.
 pub mod fmt;
diff --git a/embassy-stm32/src/sdmmc/mod.rs b/embassy-stm32/src/sdmmc/mod.rs
index 433f73d79..be788f1b0 100644
--- a/embassy-stm32/src/sdmmc/mod.rs
+++ b/embassy-stm32/src/sdmmc/mod.rs
@@ -188,7 +188,9 @@ fn clk_div(ker_ck: Hertz, sdmmc_ck: u32) -> Result<(bool, u16, Hertz), Error> {
 #[cfg(sdmmc_v1)]
 type Transfer<'a, C> = crate::dma::Transfer<'a, C>;
 #[cfg(sdmmc_v2)]
-type Transfer<'a, C> = core::marker::PhantomData<&'a mut C>;
+struct Transfer<'a, C> {
+    _dummy: core::marker::PhantomData<&'a mut C>,
+}
 
 #[cfg(all(sdmmc_v1, dma))]
 const DMA_TRANSFER_OPTIONS: crate::dma::TransferOptions = crate::dma::TransferOptions {
@@ -539,7 +541,9 @@ impl<'d, T: Instance, Dma: SdmmcDma<T> + 'd> Sdmmc<'d, T, Dma> {
             let transfer = {
                 regs.idmabase0r().write(|w| w.set_idmabase0(buffer.as_mut_ptr() as u32));
                 regs.idmactrlr().modify(|w| w.set_idmaen(true));
-                core::marker::PhantomData
+                Transfer {
+                    _dummy: core::marker::PhantomData,
+                }
             };
 
             regs.dctrl().modify(|w| {
@@ -593,7 +597,9 @@ impl<'d, T: Instance, Dma: SdmmcDma<T> + 'd> Sdmmc<'d, T, Dma> {
             let transfer = {
                 regs.idmabase0r().write(|w| w.set_idmabase0(buffer.as_ptr() as u32));
                 regs.idmactrlr().modify(|w| w.set_idmaen(true));
-                core::marker::PhantomData
+                Transfer {
+                    _dummy: core::marker::PhantomData,
+                }
             };
 
             regs.dctrl().modify(|w| {
diff --git a/embassy-sync/src/lib.rs b/embassy-sync/src/lib.rs
index f9435ecff..53d95d081 100644
--- a/embassy-sync/src/lib.rs
+++ b/embassy-sync/src/lib.rs
@@ -1,6 +1,5 @@
 #![cfg_attr(not(any(feature = "std", feature = "wasm")), no_std)]
 #![cfg_attr(feature = "nightly", feature(async_fn_in_trait, impl_trait_projections))]
-#![cfg_attr(feature = "nightly", allow(incomplete_features))]
 #![allow(clippy::new_without_default)]
 #![doc = include_str!("../README.md")]
 #![warn(missing_docs)]
diff --git a/embassy-time/src/lib.rs b/embassy-time/src/lib.rs
index 8b0aebe19..8f57eabcb 100644
--- a/embassy-time/src/lib.rs
+++ b/embassy-time/src/lib.rs
@@ -1,6 +1,5 @@
 #![cfg_attr(not(any(feature = "std", feature = "wasm", test)), no_std)]
 #![cfg_attr(feature = "nightly", feature(async_fn_in_trait))]
-#![cfg_attr(feature = "nightly", allow(incomplete_features))]
 #![doc = include_str!("../README.md")]
 #![allow(clippy::new_without_default)]
 #![warn(missing_docs)]
diff --git a/embassy-time/src/queue_generic.rs b/embassy-time/src/queue_generic.rs
index 0f67d9dbb..64a8af4bc 100644
--- a/embassy-time/src/queue_generic.rs
+++ b/embassy-time/src/queue_generic.rs
@@ -64,7 +64,7 @@ impl InnerQueue {
         self.queue
             .iter_mut()
             .find(|timer| timer.waker.will_wake(waker))
-            .map(|mut timer| {
+            .map(|timer| {
                 timer.at = min(timer.at, at);
             })
             .unwrap_or_else(|| {
diff --git a/embassy-usb-driver/src/lib.rs b/embassy-usb-driver/src/lib.rs
index 2c05f94f7..86e37595b 100644
--- a/embassy-usb-driver/src/lib.rs
+++ b/embassy-usb-driver/src/lib.rs
@@ -1,6 +1,5 @@
 #![no_std]
 #![feature(async_fn_in_trait)]
-#![allow(incomplete_features)]
 #![doc = include_str!("../README.md")]
 #![warn(missing_docs)]
 
diff --git a/examples/stm32wl/src/bin/lora_lorawan.rs b/examples/stm32wl/src/bin/lora_lorawan.rs
index 644ce2959..1a271b2f2 100644
--- a/examples/stm32wl/src/bin/lora_lorawan.rs
+++ b/examples/stm32wl/src/bin/lora_lorawan.rs
@@ -4,7 +4,6 @@
 #![no_main]
 #![macro_use]
 #![feature(type_alias_impl_trait, async_fn_in_trait)]
-#![allow(incomplete_features)]
 
 use defmt::info;
 use embassy_executor::Spawner;
diff --git a/examples/stm32wl/src/bin/lora_p2p_receive.rs b/examples/stm32wl/src/bin/lora_p2p_receive.rs
index 81e9c7057..5e80e8f6a 100644
--- a/examples/stm32wl/src/bin/lora_p2p_receive.rs
+++ b/examples/stm32wl/src/bin/lora_p2p_receive.rs
@@ -4,7 +4,6 @@
 #![no_main]
 #![macro_use]
 #![feature(type_alias_impl_trait, async_fn_in_trait)]
-#![allow(incomplete_features)]
 
 use defmt::info;
 use embassy_executor::Spawner;
diff --git a/examples/stm32wl/src/bin/lora_p2p_send.rs b/examples/stm32wl/src/bin/lora_p2p_send.rs
index 263d4e670..e22c714bd 100644
--- a/examples/stm32wl/src/bin/lora_p2p_send.rs
+++ b/examples/stm32wl/src/bin/lora_p2p_send.rs
@@ -4,7 +4,6 @@
 #![no_main]
 #![macro_use]
 #![feature(type_alias_impl_trait, async_fn_in_trait)]
-#![allow(incomplete_features)]
 
 use defmt::info;
 use embassy_executor::Spawner;
diff --git a/examples/wasm/src/lib.rs b/examples/wasm/src/lib.rs
index d44c020b6..edfe8bafc 100644
--- a/examples/wasm/src/lib.rs
+++ b/examples/wasm/src/lib.rs
@@ -1,5 +1,4 @@
 #![feature(type_alias_impl_trait)]
-#![allow(incomplete_features)]
 
 use embassy_executor::Spawner;
 use embassy_time::{Duration, Timer};
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
index 2301ddc8d..fd454db26 100644
--- a/rust-toolchain.toml
+++ b/rust-toolchain.toml
@@ -1,7 +1,7 @@
 # Before upgrading check that everything is available on all tier1 targets here:
 # https://rust-lang.github.io/rustup-components-history
 [toolchain]
-channel = "nightly-2023-04-18"
+channel = "nightly-2023-05-18"
 components = [ "rust-src", "rustfmt", "llvm-tools-preview" ]
 targets = [
     "thumbv7em-none-eabi",