http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58209
--- Comment #4 from Marek Polacek <mpolacek at gcc dot gnu.org> --- And perhaps even better, use __INTPTR_TYPE__ instead of long... typedef __INTPTR_TYPE__ T; T * foo (T n) { if (n) return (T *) 1; T s = (T) foo (1); return (T *) (s + 1); }