Runtime checks only take effect at -Onone. Even if you explicitly ask for 
checks via -enforce-exclusivity=checked, they will be stripped (with a warning 
from the driver).

Support for dynamic checking at -O is something that will be considered post 
Swift 4.

-Andy

> On Jun 1, 2017, at 4:47 PM, Andrew Trick <atr...@apple.com> wrote:
> 
> Hi swift-dev,
> 
> PR-9995 enables exclusivity runtime checks:
> https://github.com/apple/swift/pull/9995
> 
> These checks catch violations of exclusivity that can't be discovered 
> statically [0], printing the message:
> 
> "Simultaneous accesses to 0x*, but modification requires exclusive access."
> 
> The error message is followed by a backtrace and details on the source 
> locations of the two conflicting accesses.
> 
> In Swift 3 mode, this runtime diagnostic is a warning. In Swift 4 mode it is 
> an error, meaning the program aborts immediately after reporting the first 
> failure.
> 
> To disable the runtime checks, use -enforce-exclusivity=unchecked, which 
> enables static
> checks only.
> 
> This feature is explained in the Swift evolution proposal: Enforce Exclusive 
> Access to Memory:
> https://github.com/apple/swift-evolution/blob/master/proposals/0176-enforce-exclusive-access-to-memory.md
> 
> Note that exclusivity is not yet fully enforced for noescape closures. The 
> current checks are conservative in this respect. Enforcement will be 
> strengthened to handle this case in the near future, pending review of the 
> proposal ammendment: "Restrictions on recursive uses of non-escaping 
> closures".
> https://github.com/apple/swift-evolution/blob/master/proposals/0176-enforce-exclusive-access-to-memory.md#restrictions-on-recursive-uses-of-non-escaping-closures
> 
> [0] dynamic exclusivity violation
> 
> struct MyStruct {
>  var i: Int = 0
> 
>  mutating func mutateS(_ f: ()->Int) {
>    i += f()
>  }
> }
> 
> class MyClass {
>  var s: MyStruct
> 
>  init() { s = MyStruct() }
> }
> 
> func foo(_ o: MyClass) {
>  o.s.mutateS({ o.s.i })
> }
> 
> -Andy

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

Reply via email to