<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hello,<div class=""><br class=""></div><div class="">Indeed, I had reduced the code too much. John McCall was kind enough to have a look and here’s the offending code:</div><div class=""><br class=""></div><div class=""><font face="Menlo" class="">func&nbsp;layoutHorizontally(leftRect:&nbsp;inout&nbsp;CGRect, rightRect:&nbsp;inout&nbsp;CGRect) {<br class="">&nbsp; &nbsp; let&nbsp;totalWidth =&nbsp;imageRect.size.width&nbsp;+&nbsp;titleRect.size.width&nbsp;+&nbsp;contentSpacing<br class="">&nbsp; &nbsp; rightRect.origin.x&nbsp;= leftRect.maxX&nbsp;+&nbsp;contentSpacing<br class="">}</font></div><div class=""><br class=""></div><div class="">The problem is that <font face="Menlo" class="">imageRect</font> and <font face="Menlo" class="">titleRect</font> are referenced both directly and in the inout parameters.</div><div class=""><br class=""></div><div class="">But there’s something I’m not understanding. I went back to the ownership manifesto and re-read the law of exclusivity to make sure I understand it:</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><i class="">If a storage reference expression evaluates to a storage reference that is implemented by a variable, then the formal access duration of&nbsp;that access may not overlap the formal access duration of any other access to the same variable unless both accesses are reads.</i></div></blockquote><div class=""><br class=""></div><div class="">So I tried to write a test to trigger the runtime error, but was unsuccessful:</div><div class=""><br class=""></div><font face="Menlo" class="">class&nbsp;MyClass {<br class="">&nbsp; &nbsp;&nbsp;var&nbsp;p:&nbsp;CGRect&nbsp;= .zero<br class="">}<br class=""><br class="">func&nbsp;trigger(a:&nbsp;MyClass, b:&nbsp;MyClass) {<br class="">&nbsp; &nbsp;&nbsp;a.p = b.p<br class="">}<br class=""><br class="">let&nbsp;m =&nbsp;MyClass()<br class=""></font><div class=""><font face="Menlo" class="">trigger(a: m, b: m)</font></div><div class=""><br class=""></div><div class="">Here, a storage reference expression (a.p) evaluates to a storage reference that is implemented by a variable (the p property of an instance m of MyClass) and its formal access duration (the trigger function) overlaps the formal access duration of another access to the same variable (through the b.p storage reference expression) and both accesses are not reads (a.p is on the LHS of an assignment).</div><div class=""><br class=""></div><div class="">Why does this not trigger the Law of Exclusivity?</div><div class=""><br class=""></div><div class="">Regards,</div><div class="">David.</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 27 Jul 2017, at 21:33, Kyle Murray &lt;<a href="mailto:kyle_murray@apple.com" class="">kyle_murray@apple.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html; charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi David,<div class=""><br class=""></div><div class="">Are <font face="Menlo" class="">padding</font> or <font face="Menlo" class="">spacing</font> computed properties that access either rectangle? They aren't defined in your stripped down code. For example:</div><div class=""><br class=""></div><div class=""><div style="margin: 0px; font-stretch: normal; font-size: 14px; line-height: normal; font-family: &quot;SF Mono&quot;; background-color: rgb(255, 255, 255);" class=""><span style="color: #ba2da2" class="">var</span> spacing: <span style="color: #703daa" class="">CGFloat</span> {</div><div style="margin: 0px; font-stretch: normal; font-size: 14px; line-height: normal; font-family: &quot;SF Mono&quot;; background-color: rgb(255, 255, 255);" class="">&nbsp; &nbsp; <span style="color: #ba2da2" class="">return</span> imageRect.maxX</div><div style="margin: 0px; font-stretch: normal; font-size: 14px; line-height: normal; font-family: &quot;SF Mono&quot;; background-color: rgb(255, 255, 255);" class="">}</div></div><div class=""><br class=""></div><div class="">Without doing something like that, I don't see the same access conflicts that you're seeing.</div><div class=""><br class=""></div><div class="">-Kyle</div><div class=""><div class=""><br class=""><blockquote type="cite" class=""><div class="">On Jul 27, 2017, at 5:04 AM, David Hart via swift-users &lt;<a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hello,<div class=""><br class=""></div><div class="">In Xcode 9 beta 4, Swift 4, I’m getting runtime errors popping up for Simultaneous accesses and I think they may be false negatives. Here’s a stripped down version of my code:</div><div class=""><br class=""></div><div class=""><font face="Menlo" class="">class MyButton: UIButton {</font></div><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space:pre">        </span>fileprivate&nbsp;var&nbsp;imageRect:&nbsp;CGRect&nbsp;= .zero<br class=""></font><div class=""><font face="Menlo" class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>fileprivate&nbsp;var&nbsp;titleRect:&nbsp;CGRect&nbsp;= .zero</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; func&nbsp;updateRects() {</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if imageBeforeTitle {</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layoutHorizontally(leftRect: &amp;imageRect, rightRect: &amp;titleRect)</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; layoutHorizontally(leftRect: &amp;titleRect, rightRect: &amp;imageRect)</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; }</font></div><div class=""><font face="Menlo" class=""><br class=""></font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; func layoutHorizontally(leftRect:&nbsp;inout&nbsp;CGRect,&nbsp;rightRect:&nbsp;inout&nbsp;CGRect) {</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; leftRect.origin.x = padding</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;rightRect.origin.x = leftRect.maxX + spacing</font></div><div class=""><font face="Menlo" class="">&nbsp; &nbsp; &nbsp; &nbsp; }</font></div><div class=""><font face="Menlo" class="">}</font></div><div class=""><br class=""></div><div class="">While the layoutHorizontally method has two CGRect inout parameters, never in my code do I pass the same CGRect. Any ideas if this is a bug I should post on <a href="http://bugs.swift.org/" class="">bugs.swift.org</a> or if I’m missing something?</div><div class=""><br class=""></div><div class="">David.</div></div>_______________________________________________<br class="">swift-users mailing list<br class=""><a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-users" class="">https://lists.swift.org/mailman/listinfo/swift-users</a><br class=""></div></blockquote></div><br class=""></div></div></div></blockquote></div><br class=""></div></body></html>