However not all code could take advantage of stack copying, so sometimes it would fall back to the old stack splitting behaviour. The magic code that would decide if you split or copied was, apparently, the runtime, stuff like channel send and receive, map operations, which if they needed to grow the stack would require splitting as this code was written in C not Go and the c compiler didn't emit the right magic for the stack walking code which decided if you split or copied.
In 1.4 due to rewrite of th Go facing parts of the runtime the stack walker, garbage collector and stack growth code always knows the state of every call frame so can always copy the stack. This resulted in a metric shed tonne of corner cases being deleted from those parts of the runtime. So, what was precise before, is now even more precise. o_O
In 1.5, the remaining c code in the runtime will be converted to go, meaning the go standard library is written only in go. Yay, no more weird c89(ish) c code in the runtime.