Hi Slava & Joe, Thank you for the response.
The failed test case is "generic instantiation" of KeyPath.swift. Here is details of log: [ RUN ] key paths.key path generic instantiation stdout>>> check failed at /home/wk/sw4/swift/test/stdlib/KeyPath.swift, line 193 stdout>>> expected: Swift.ReferenceWritableKeyPath<a.S<Swift.Int>, Swift.Int> (of type Swift.ReferenceWritableKeyPath<a.S<Swift.Int>, Swift.Int>) stdout>>> actual: Swift.ReferenceWritableKeyPath<a.S<Swift.Int>, Swift.Int> (of type Swift.ReferenceWritableKeyPath<a.S<Swift.Int>, Swift.Int>) stdout>>> check failed at /home/wk/sw4/swift/test/stdlib/KeyPath.swift, line 197 stdout>>> expected: Swift.ReferenceWritableKeyPath<a.S<Swift.String>, Swift.Int> (of type Swift.ReferenceWritableKeyPath<a.S<Swift.String>, Swift.Int>) stdout>>> actual: Swift.ReferenceWritableKeyPath<a.S<Swift.String>, Swift.Int> (of type Swift.ReferenceWritableKeyPath<a.S<Swift.String>, Swift.Int>) stdout>>> check failed at /home/wk/sw4/swift/test/stdlib/KeyPath.swift, line 201 stdout>>> expected: Swift.ReferenceWritableKeyPath<a.S<StdlibUnittest.LifetimeTracked>, Swift.Int> (of type Swift.ReferenceWritableKeyPath<a.S<StdlibUnittest.LifetimeTracked>, Swift.Int>) stdout>>> actual: Swift.ReferenceWritableKeyPath<a.S<StdlibUnittest.LifetimeTracked>, Swift.Int> (of type Swift.ReferenceWritableKeyPath<a.S<StdlibUnittest.LifetimeTracked>, Swift.Int>) [ FAIL ] key paths.key path generic instantiation Other test cases of KeyPath.siwft are all passed. It is found that the failure reason is @stdlib/public/core/KeyPath.swift 85 if aComponent.header.endOfReferencePrefix 86 != bComponent.header.endOfReferencePrefix 87 || aComponent.value != bComponent.value // this is true on s390x, aComponent.value="struct(0)", bComponent.value="struct(48)" 88 || aType != bType { 89 return false 90 } Then tracing to: 2094 func tryToResolveOffset() { 2095 if header.payload == RawKeyPathComponent.Header.unresolvedFieldOffsetPayload { 2096 // Look up offset in type metadata. The value in the pattern is the 2097 // offset within the metadata object. 2098 let metadataPtr = unsafeBitCast(base, to: UnsafeRawPointer.self) 2099 let offsetOfOffset = patternBuffer.pop(UInt32.self) 2100 print("+++++++++++ int_offsetOfOffset=\(Int(offsetOfOffset))\n") 2101 var offset = metadataPtr.load(fromByteOffset: Int (offsetOfOffset), // given the same input parameters (offsetOfOfferset=56), 2102 as: UInt32.self) // different "offset" (0 on s390x, and 48 on x86_64) 2103 // Rewrite the header for a resolved offset. Then it comes Builtin.loadRaw of UnsafeRawPointer.swift.gyb As My lldb and gdb do not stop @ emitBuiltinLoadRaw(), I inserted a "printf" in the fucntion, but it does not print out anything. Yes, I think it maybe related to alignment or endianness, so we need to find the source code of LoadRaw. Thanks, Sam Ding, Linux on z Systems Open Source Ecosystem IBM Toronto Lab, email: samd...@ca.ibm.com phone: (905)413-2947 From: Slava Pestov <spes...@apple.com> To: Sam Ding <samd...@ca.ibm.com> Cc: swift-dev <swift-dev@swift.org> Date: 09/28/2017 05:24 PM Subject: Re: [swift-dev] Builtin.loadRaw Sent by: spes...@apple.com Hi Sam, The builtin is defined in lib/SILGen/SILGenBuiltin.cpp, look for the function named emitBuiltinLoadRaw(). However I suspect the problem in this case is not that the builtin is implemented incorrectly (it eventually lowers to an LLVM load instruction) but that something further upstream is going wrong, perhaps with alignment or endianness. Can you tell us which unit tests are failing specifically? Slava On Sep 28, 2017, at 2:16 PM, Sam Ding via swift-dev < swift-dev@swift.org> wrote: I am testing a test case "KeyPath.swift" on s390x for v4.0 . It is found that " Builtin.loadRaw" as the below of "stdlib/public/core/UnsafeRawPointer.swift.gyb" returns a different value than that on x86-64. @_inlineable public func load<T>(fromByteOffset offset: Int = 0, as type: T.Type) -> T { _debugPrecondition(0 == (UInt(bitPattern: self + offset) & (UInt(MemoryLayout<T>.alignment) - 1)), "load from misaligned raw pointer") return Builtin.loadRaw((self + offset)._rawValue) // return a different value on s390x vs x86-64 } My debugger (lldb) does not guide me to the detailed of " Builtin.loadRaw". Searching "loadRaw" and finding swift/include/swift/AST/Builtins.def:BUILTIN_SIL_OPERATION (LoadRaw, "loadRaw", Special) But I could not find the definition of this "LoadRaw" from the whole swift v4. Can anyone give me a hint where its implementation is? Thanks, Sam Ding, Linux on z Systems Open Source Ecosystem IBM Toronto Lab, email: samd...@ca.ibm.com phone: (905)413-2947 _______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev
_______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev