<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="">The problem is were not marking the materializeForSet accessor in&nbsp;DefaultMutableReference.value as an override. Definitely a bug:<div class=""><br class=""></div><div class="">sil_vtable DefaultMutableReference {<br class="">&nbsp;&nbsp;#MutableReference.init!initializer.1: _TFC1d23DefaultMutableReferencecfT_GS0_x_&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;// DefaultMutableReference.init() -&gt; DefaultMutableReference&lt;A&gt;<br class="">&nbsp;&nbsp;#MutableReference.value!getter.1: _TFC1d23DefaultMutableReferenceg5valuex&nbsp;&nbsp; &nbsp;&nbsp;// DefaultMutableReference.value.getter<br class="">&nbsp;&nbsp;#MutableReference.value!setter.1: _TFC1d23DefaultMutableReferences5valuex&nbsp;&nbsp; &nbsp;&nbsp;// DefaultMutableReference.value.setter<br class="">&nbsp;&nbsp;#MutableReference.value!materializeForSet.1: _TFC1d16MutableReferencem5valuex // MutableReference.value.materializeForSet<br class="">&nbsp;&nbsp;#DefaultMutableReference.value!materializeForSet.1: _TFC1d23DefaultMutableReferencem5valuex&nbsp;&nbsp;&nbsp;// DefaultMutableReference.value.materializeForSet</div><div class=""><br class=""></div><div class="">The last entry should not exist.</div><div class=""><br class=""></div><div class="">I’ll have a fix shortly.</div><div class=""><br class=""></div><div class="">Slava</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 2, 2017, at 9:04 AM, Jordan Rose 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=us-ascii" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">Seems like a bug, and moreover it seems like a regression from Swift 3.0. Mind filing a report at <a href="http://bugs.swift.org/" class="">bugs.swift.org</a>?</div><div class=""><br class=""></div><div class="">Thanks!</div><div class="">Jordan</div><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Feb 1, 2017, at 20:49, Howard Lovatt 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=""><div dir="ltr" class="">Hi All,<div class=""><br class=""></div><div class="">Anyone know what is going on here:</div><div class=""><br class=""></div><div class="">&nbsp; &nbsp; //: Closure picks up static type not dynamic</div><div class="">&nbsp; &nbsp;&nbsp;<br class="">&nbsp; &nbsp; class MutableReference&lt;T&gt; {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; init() {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; guard type(of: self) != MutableReference.self else {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fatalError("MutableReference is an abstract class; create a derrivative of MutableReference")<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br class="">&nbsp; &nbsp; &nbsp; &nbsp; }<br class="">&nbsp; &nbsp; &nbsp; &nbsp; var value: T {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fatalError("Calculated property value getter should be overridden")<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fatalError("Calculated property value setter should be overridden")<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br class="">&nbsp; &nbsp; &nbsp; &nbsp; }<br class="">&nbsp; &nbsp; }</div><div class="">&nbsp; &nbsp;&nbsp;<br class="">&nbsp; &nbsp; class DefaultMutableReference&lt;T&gt;: MutableReference&lt;T&gt; {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; private var _value: T<br class="">&nbsp; &nbsp; &nbsp; &nbsp; override var value: T {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _value<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _value = newValue<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br class="">&nbsp; &nbsp; &nbsp; &nbsp; }<br class="">&nbsp; &nbsp; &nbsp; &nbsp; init(_ value: T) {<br class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _value = value<br class="">&nbsp; &nbsp; &nbsp; &nbsp; }<br class="">&nbsp; &nbsp; }<br class=""><br class="">&nbsp; &nbsp; let e: (MutableReference&lt;[Int]&gt;, Int) -&gt; Void = { $0.value.append($1) }<br class="">&nbsp; &nbsp; let dmr = DefaultMutableReference([2])<br class="">&nbsp; &nbsp; dmr.value // [2]<br class="">&nbsp; &nbsp; e(dmr, 2) // fatal error: Calculated property value getter should be overridden<br class="">&nbsp; &nbsp; dmr.value // Expect [2, 2] &nbsp;<br class=""><p class="gmail-p1">If I change `e` to:</p>&nbsp; &nbsp; let e: (DefaultMutableReference&lt;[Int]&gt;, Int) -&gt; Void = { $0.value.append($1) }<br class=""><p class="gmail-p1">It works fine.</p><p class="gmail-p1">IE the closure is using the static type of its first argument and not dynamically dispatching.</p><p class="gmail-p1">Am I doing something wrong? Is there a way round where I can still use the base class for `e`?</p><p class="gmail-p1"><br class=""></p><p class="gmail-p1">Thanks for any help in advance,</p><p class="gmail-p1">-- Howard.<br class=""></p>
</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>_______________________________________________<br class="">swift-users mailing list<br class=""><a href="mailto:swift-users@swift.org" class="">swift-users@swift.org</a><br class="">https://lists.swift.org/mailman/listinfo/swift-users<br class=""></div></blockquote></div><br class=""></div></body></html>