xcode LLMV 3.1 problema de la matriz del comstackdor

Me encontré con el siguiente problema en el comstackdor 3.1 de Apple LLVM:

int numIndex = 0; int *indices = (int *)malloc(3 * sizeof(int)); indices[numIndex] = numIndex++; indices[numIndex] = numIndex++; indices[numIndex] = numIndex++; for (int i = 0; i < 3; i++) { NSLog(@"%d", indices[i]); } 

Salida: 1 0 1

Y

 int numIndex = 0; int indices[3]; indices[numIndex] = numIndex++; indices[numIndex] = numIndex++; indices[numIndex] = numIndex++; for (int i = 0; i < 3; i++) { NSLog(@"%d", indices[i]); } 

Salida: 0 0 1

Estoy esperando 0 1 2 como resultado. El mismo código que usa LLVM GCC 4.2 produce la salida correcta. ¿Hay algunas banderas de optimization que me faltan o algo que no entiendo?

Entonces parece que el comportamiento es el siguiente

 int numIndex = 0; int indices[3]; indices[numIndex] = numIndex++; 

aquí el lado derecho se evalúa primero, devuelve 0 e incrementa numIndex en uno, luego se evalúa el lado derecho, por lo que los índices [1] obtienen 0

 indices[numIndex] = numIndex++; 

aquí el lado derecho se evalúa primero, devuelve 1 e incrementa numIndex en uno, luego se evalúa el lado derecho, por lo que los índices [2] obtienen 1

 indices[numIndex] = numIndex++; 

aquí el lado derecho se evalúa primero, devuelve 2 e incrementa numIndex en uno, luego se evalúa el lado derecho, por lo que los índices [3] obtienen 2 (y estás realmente fuera de límites)

Y tenga en count que nunca se han asignado realmente índices [0], por lo que podría ser cualquier cosa (en mi testing fue el número int máximo)

EDIT- Parece que el comentario dado que este es el comportamiento en realidad es indefinido, por lo que aunque observé esto, no es una respuesta definida