SE-0176 Enforce Exclusive Access to Memory 
(https://github.com/apple/swift-evolution/blob/master/proposals/0176-enforce-exclusive-access-to-memory.md)
 states that "Accesses to different stored properties of a struct or different 
elements of a tuple are allowed to overlap."

And indeed this compiles and runs as expected (Xcode 9 beta 4):

    // main.swift

    func foo()  {
        var tuple = (1, 2)
        swap(&tuple.0, &tuple.1)
        print(tuple)
    }

    foo()

However, if the tuple is a global variable, it crashes with a runtime exception:

    // main.swift

    var tuple = (1, 2)
    swap(&tuple.0, &tuple.1)
    print(tuple)

    Simultaneous accesses to 0x100401cb0, but modification requires exclusive 
access.
    Previous access (a modification) started at tupleaccess`main + 76 
(0x1000015cc).
    Current access (a modification) started at:
    0    tupleaccess                        0x0000000100335b60 
swift_beginAccess + 605
    1    tupleaccess                        0x0000000100001580 main + 110
    2    libdyld.dylib                      0x00007fffa7284234 start + 1

Is there anything special with simultaneous access to members of a global 
tuple, or is this a bug?

Regards, Martin

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

Reply via email to