http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48440
--- Comment #1 from H.J. Lu <hjl.tools at gmail dot com> 2011-04-04 22:05:30 UTC --- The record_reference change remove the cast, which is needed for Pmode != ptr_mode: diff -upr bad/x.i.143r.expand good/x.i.143r.expand --- bad/x.i.143r.expand 2011-04-04 15:02:05.652458274 -0700 +++ good/x.i.143r.expand 2011-04-04 15:02:55.233678782 -0700 @@ -5,7 +5,7 @@ foo (int a) { void * gotovar.0; void * p; - 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)}; int D.2689; unsigned int D.2688; const short int D.2687; @@ -105,7 +105,7 @@ foo (int a) { void * gotovar.0; void * p; - 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)}; int D.2689; unsigned int D.2688; const short int D.2687;