Properties and subscript accessors do need a special marking in order to yield: you have to be defining one of the two special accessors that yield instead of returning. You cannot yield in an ordinary func or getter.
We really don't want to just make an unsafeBuffer property that's treated completely normally in the language. The scoping is critically important, and if it's an ordinary property — even if it's implemented with a coroutine accessor like _read or _modify — the language is not going to understand that it needs to be doing things within the scope, as opposed to just copying the value and exiting the coroutine as soon as possible.
Hmm. That's a fair point: since the goal of this feature would be to say that the value should only be used within the scope, it's not clear why it would ever be useful to provide an owned value that the program could move away and use later. Maybe the return should be implicitly borrowed if not inout.