Thanks very much John, that's what I expected and hoped for as it's enough to 
call kevent() for a (kevent_t, kevent_t) used as struct kevent[2] .

> On 29 Apr 2017, at 00:28, John McCall <rjmcc...@apple.com> wrote:
> 
>> On Apr 28, 2017, at 7:03 AM, Johannes Weiss via swift-dev 
>> <swift-...@swift.org> wrote:
>> Hi swift-users,
>> 
>> (sorry for the cross post to swift-dev, but wasn't sure where it belongs)
>> 
>> I tried to find guarantees about the memory layout Swift tuples but couldn't 
>> find anything. The reason I ask is because I'd like to use them as fixed 
>> sized (stack allocated) arrays. I'm pretty sure they're actually not 
>> guaranteed to be stack allocated but highly likely I assume :).
> 
> Tuples are guaranteed to use a standard C-style layout wherever that layout 
> is ABI-observable, e.g. when you construct an UnsafePointer to one.
> 
> Note that that layout isn't ABI-observable when the tuple is, say, just 
> stored in a struct.  The compiler is allowed to break up the tuple and store 
> its components however it likes.  Of course, if the compiler does that, and 
> you turn around and construct an UnsafePointer to that property, then the 
> compiler has to reconstitute the tuple into an ABI-compliant temporary that 
> it can give you a pointer to; this is yet another reason why you can't 
> maintain permanent unsafe pointers to components of a struct.
> 
> John.
> 
>> 
>> Am I correct in assuming that
>> 
>>   let swift_events: (kevent, kevent) = ...
>> 
>> has the same memory layout as
>> 
>>   struct kevent c_events[2] = ...
>> 
>> ? In other words, is this legal:
>> 
>>   var events = (kevent(), kevent())
>>   withUnsafeMutableBytes(of: &events) { event_ptr in
>>       precondition(MemoryLayout<kevent>.size * 2 == event_ptr.count)
>>       if let ptr = event_ptr.baseAddress?.bindMemory(to: kevent.self, 
>> capacity: 2) {
>>           return kevent(someFileDescriptor, ptr, 2, ptr, 2, nil)
>>       }
>>   }
>> 
>> I'm assuming yes but I'd like to make sure.
>> 
>> Many thanks,
>> Johannes
>> 
>> _______________________________________________
>> swift-dev mailing list
>> swift-...@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-dev

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to