       waiter.initialize(to: Waiter(source: source))
 
       repeat {
-        waiter.pointee.next = state.waiters?.assumingMemoryBound(to: Waiter<Value>.self)
+        waiter.pointee.next = waiterQueue(from: state)
         let newState = Int(bitPattern: waiter) | state.state
         if CAtomicsCompareAndExchange(deferredState, &state, newState, .weak, .release, .relaxed)
         { // waiter is now enqueued; it will be deallocated at a later time by notifyWaiters()

    } while !CAtomicsCompareAndExchange(deferredState, &current, final, .weak, .acqrel, .acquire)

    precondition(current.isResolved == false)
    let waitQueue = current.waiters?.assumingMemoryBound(to: Waiter<Value>.self)
    notifyWaiters(queue, waitQueue, result)

    // This `Deferred` has been resolved
    return true

      resolved.deinitialize(count: 1)
      resolved.deallocate()
    }
    else if let waiters = waiterQueue(from: state)
    {
      deallocateWaiters(waiters)
    }
    deferredState.deallocate()
  }
