Paul Eggert wrote:
> converting a pointer to uintptr_t and back means that GCC won't connect
> the resulting pointer to the original and this messes up bounds checking
> on the result.
I don't observe this. This test program:
==============================================
#include <stdlib.h>
#include <stdint.h>
int main ()
{
int n = 100;
char *mem = malloc (n);
char* p = (char *) (uintptr_t) mem;
p[-2] = 'x';
p[n] = 'z';
return 0;
}
==============================================
when compiled with "gcc -mmpx -fcheck-pointer-bounds" (gcc 7.3.0),
produces
Saw a #BR! status 1 at 0x4005c8
Saw a #BR! status 1 at 0x4005e4
Bruno