That's silly… We *know* that endp and p are char* (and to the same object) and so any comparison is allowed without any weird casts…
The real fix is: if (endp < p) On Sep 25, 2011, at 7:35 PM, Igor Galić wrote: > > > ----- Original Message ----- >> for sure… mixing pointers and ints is Do Not Do In C 101. >> Tracking the full issue… > > Here's how we deal with that on trunk: > > > @@ -1863,7 +1861,7 @@ > c->freeall(); > p = (char *) DOUBLE_ALIGN(p); > #ifdef PURIFY > - if ((unsigned int) endp < (unsigned int) p) > + if ((uintptr_t) endp < (uintptr_t) p) > memset(endp, 0, (p - endp)); > #endif > } > >