Pollux (./300) :
Accessoirement c'est illusoire de croire qu'on peut compter sur le compilateur pour faire ce genre d'optimisation à la place du programmeur : s'il y avait eu la moindre modification de pointeur en mémoire, ou le moindre appel de fonction à l'intérieur du bloc if, la transformation n'aurait pas été faite
C'est faux, si les types sont différents, GCC part du principe que le pointeur ne peut pas pointer sur le tableau (sauf l'exception que
char * peut pointer sur tout). Ça s'appelle le strict aliasing, ça en a cassé, des programmes, quand ils ont introduit ça la première fois, mais c'est conforme au standard C et ça permet justement ce genre d'optimisations.