diff --git a/Cargo.toml b/Cargo.toml
index e7055fbe8c03f4d5df860fdd6e68c704f1d8432c..d22d232a842f568d3c7807789c3a60eddff962a5 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,4 +11,4 @@ repository = "https://gitlab.redox-os.org/redox-os/uefi_alloc"
 name = "uefi_alloc"
 
 [dependencies]
-redox_uefi = "0.1.0"
+redox_uefi = "0.1.2"
diff --git a/src/lib.rs b/src/lib.rs
index 4d14d2fc37850fa8ad0c7f5f878d71696634f7f8..ab481c6bfd89dd2a6f86d31f5fa986e6eec18144 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,10 +1,10 @@
 #![feature(allocator_api)]
-#![feature(const_fn)]
-#![feature(try_trait)]
+#![feature(try_trait_v2)]
+#![feature(control_flow_enum)]
 #![no_std]
 
 use core::alloc::{GlobalAlloc, Layout};
-use core::ops::Try;
+use core::ops::{ControlFlow, Try};
 use core::ptr::{self, NonNull};
 use uefi::memory::MemoryType;
 use uefi::system::SystemTable;
@@ -21,17 +21,16 @@ unsafe impl GlobalAlloc for Allocator {
     unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
         let uefi = UEFI.expect("__rust_allocate: uefi not initialized");
         let mut ptr = 0;
-        if (uefi.as_ref().BootServices.AllocatePool)(
+        let res = (uefi.as_ref().BootServices.AllocatePool)(
             MemoryType::EfiLoaderData,
             layout.size(),
             &mut ptr,
         )
-        .into_result()
-        .is_ok()
-        {
-            ptr as *mut u8
-        } else {
-            ptr::null_mut()
+        .branch();
+
+        match res {
+            ControlFlow::Continue(ptr) => ptr as *mut u8,
+            ControlFlow::Break(_) => ptr::null_mut(),
         }
     }