¿Causa de la falla de sobre-lanzamiento de iOS ARC en XCode 6.4 compilation optimizada?

El siguiente método se bloquea debido a un lanzamiento temprano de ARC de inputLower, aunque todavía hay un fuerte ptr en el scope. Esto está utilizando XCode 6.4 para comstackr para ARM64, y solo se bloquea cuando se utiliza la optimization de O. ¿Esto es un error de ARC, o estoy haciendo algún tipo de error lógico de ARC?

void crasher(NSString * input) { NSString * inputLower = [input lowercaseString]; // should be strong ptr NSString * inputLower2 = inputLower; // should be a 2nd, independent strong ptr int i = 1; while (i < 10) { inputLower2 = [NSString stringWithFormat:@"%@%d", inputLower, i++]; // ERROR: inputLower is released here, so the next iteration will crash NSLog(@"%@", inputLower2); } } 

El locking se puede evitar simplemente agregando una copy, pero he leído las reglas de ARC en detalle, y no creo que esto deba ser requerido:

 NSString * inputLower2 = [inputLower copy]; 

Si esto no es mi culpa, presentaré un error con Apple.

He visto este tipo de cosas antes. No es una cuestión de ARC tanto como un asunto de optimization, y NSLog en particular lo provoca. En este caso, es el NSLog dentro del bucle while que causa el problema; algo se está optimizando. Si mueve el NSLog a después del ciclo while, verá que el ciclo funcionó.

Además, no puedo reproducir el locking en Xcode 7 (por eso me tomó tanto time reproducirlo, tuve que cambiar específicamente a Xcode 6.4). Esto sugiere que la gente de Apple sabe sobre esto.