anchor.diff:              if hasBeenPromoted || BufferStrategies.ShouldExplicitlyReadToReadBackBuffer(poolItem.AccessAnalysis, poolItem.Buffer.Flags, poolItem.AddressSpace, poolItem.DeviceToHostTransferMode) then
                   // No need to READ to unmanaged pointer
                   BufferTools.ReadBuffer(poolItem.Queue, poolItem.ReadMode = BufferReadMode.MapBuffer, poolItem.HostDataHandle.Value.Ptr, poolItem.Buffer, poolItem.HostDataHandle.Value.Lenghts)                
  +            // Now make sure the managed data is in sync with the possible unmanaged ptr
               poolItem.HostDataHandle.Value.SyncManagedWithUnmanaged()
                   
       member private this.PromoteUntrackedToTracked(poolItem: BufferPoolItem) =
  
positive.code:                                     parameter.IsReturned,
                                      true,
                                      queue.Device)
          //Console.WriteLine("Access analysis says this parameter is: " + parameter.AccessAnalysis.ToString())
          //Console.WriteLine("Best Memory Flags: " + mergedFlags.ToString())
          //Console.WriteLine("Best Read Mode: " + readMode.ToString())
          //Console.WriteLine("Best Write Mode: " + writeMode.ToString())
          
          if retArr.IsSome then
              //Console.WriteLine("Returned buffer is TRACKED")
              // A tracked buffer remains tracked
  
negative.code:                                     transferMode.DeviceToHostMode,                    
                                      readMode,
                                      writeMode,
                                      parameter.IsReturned)   
              // If we have to write the buffer explicitely to init it, do it         
              if BufferStrategies.ShouldExplicitlyWriteToInitBuffer(parameter.AccessAnalysis, BufferStrategies.ToOpenCLMemoryFlags(mergedFlags), addressSpace.AddressSpace, transferMode.HostToDeviceMode) then
                  dataHandle.BeforeTransferToDevice()
                  BufferTools.WriteBuffer(queue, (writeMode = BufferWriteMode.MapBuffer), bufferItem.Buffer, dataHandle.Ptr, arr.GetType().GetElementType(), ArrayUtil.GetArrayLengths(arr))    
                                
              // If this is the return buffer for root kernel in a kernel expression, remember it cause we will need to read it somewhere at the end
              if parameter.IsReturned && isRoot then
                  rootReturnBuffer <- Some(bufferItem, arr)
  