<html><body><p>I have observed that swiftc on Linux assumes it can return tuples of at most three integer-type elements in registers (rax, rdx and rcx, in that order), while clang++ supports returning at most two integer-type values in registers (rax and rdx), in accordance to the System V ABI. Doesn't this cause a problem when a Swift function calls a C++ function that returns a three-word struct indirectly while expecting the return values in registers?<br><br>I ran into this issue when porting Swift to Linux s390x, in the ManagedBufferPointer constructor which calls a runtime function written in C++, and they follow conflicting ABIs. I worked around it by setting <font size="2" face="Source Code Pro">target.MaxScalarsForDirectResult</font> to 1 in SwiftTargetInfo, but I wonder if this affects other architectures as well. Can any one shed some light on this?<br><br>Thanks,<br>Bryan<br><BR>
</body></html>