http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50145
--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> 2011-08-21 20:21:04 UTC --- > Can you please check why? Using (note that I am C illiterate;-) for (i = 0; i < 32; ++i) printf("%hd ", * (&a[i])); printf("\n"); before and after for (i = 0; i < 32; ++i) (*((unsigned short(*)[32])&a[0]))[i] = (*((char(*)[32])&a[0]))[i+8]; I get on powerpc-apple-darwin9: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 4 0 5 0 6 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 instead of 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4 0 5 0 6 0 7 0 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 on x86_64-apple-darwin10.