> On Apr 1, 2016, at 8:43 AM, Joe Groff via swift-dev <swift-dev@swift.org> 
> wrote:
> 
> 
>> On Mar 31, 2016, at 11:49 PM, Patrick Pijnappel <patrickpijnap...@gmail.com> 
>> wrote:
>> 
>> The modified version doesn't seem to change any of the results (on -O or 
>> -Onone). Note that the problem is that it's not uniquely referenced inside 
>> bar where it actually should be – that would mean that ownership is 
>> currently not directly transferred right?
> 
> You're right, I'm sorry, I misread your original comment. If the ARC 
> optimizer didn't transfer ownership, then it is correct for 
> `isUniquelyReferenced` to be false inside `bar`, since the `foo` inside of 
> `test` and the `foo` parameter to `bar` are semantically independent values. 
> If this weren't the case, then `bar` could modify a COW value type and have 
> its changes be seen back in `test`'s copy.

In other words, to avoid a copy, the COW value must be passed ‘inout’. This is 
normally true anyway for functions that mutate the value.

It would be neat to have a ‘move’ operator that handed ownership of the COW 
value off to the callee. But the memory safety of that would be problematic in 
general.

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

Reply via email to