     return withUnsafePointer(&x) {
         (ptr: UnsafePointer<T>) -> ScanResult in
         
-        let firstAddr: Pointer = Pointer(address: reinterpretCast(ptr))
+        let firstAddr: Pointer = Pointer(address: unsafeBitCast(ptr, UInt.self))
         let firstEntry = ScanEntry(parent: nil, parentOffset: 0, address: firstAddr, index: 0)
         seen[firstAddr] = true
         toScan.append(firstEntry)

    }
    
    static func read(ptr: Pointer, knownSize: Int? = nil) -> Memory? {
        let convertedPtr: UnsafePointer<Int> = reinterpretCast(ptr.address)
        var length = Int(malloc_size(convertedPtr))
        let isMalloc = length > 0
        let isSymbol = ptr.symbolName() != nil

    let address: UInt
    
    var hashValue: Int {
        return unsafeBitCast(address, Int.self)
    }
    
    var description: String {
