http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48440
--- Comment #4 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-04-05 11:02:50 UTC --- - static const short int ar[2] = {0, (short unsigned int) &l2 - (short unsigned int) &l1}; + static const short int ar[2] = {0, (short int) ((short unsigned int) (int) &l2 - (short unsigned int) (int) &l1)}; this transformation is completely reasonable for any pointer size. The bug must be elsewhere and latent.