> > whenever these semantics call for retaining a value of block-pointer type, it has the effect of a `Block_copy`. The optimizer may remove such copies when it sees that the result is used only as an argument to a call.

It's not at all clear that “these semantics” refers to local block variables or block arguments to methods. I'm skeptical of this reading.

> Which part of that thread seemed like a special case?

Upon re-reading, I guess it doesn't. Still, I was under the impression that `[block retain]` could not be equivalent to `[block copy]` because returning a different object (such as would happen when moving a block from the stack to the heap) would break the contract of the former.

That's really the thrust of the problem: a stack block gets replaced with a new block object when it gets moved to the heap. So, no, `retain` and `copy` aren't synonyms in that case.