The author explains in a blog post that a bug he has been investigating sat at the intersection of a bunch of different moving pieces. The bug involved a call to objc_autoreleaseReturnValue, objc_retainAutoreleaseReturnValue, and the behavior of ARC.
The bug occurred due to the interference of the stack protector with a call to objc_autoreleaseReturnValue, which caused an object to go into the autoreleasepool. As a result, the object was not deallocated until the pool drained.
The author mentions that their code relied on performance optimizations in the runtime, Bazel unexpectedly passed -fstack-protector, and the Objective-C runtime has a performance optimization that does more than optimize.
The bug highlights a compiler option in clang that can change observable behavior without proper documentation.