1 /* { dg-do run } */ 2 /* { dg-options "-fcheck-pointer-bounds -mmpx" } */ 3 4 #include "mpx-check.h" 5 6 #define N 2 7 8 extern void abort (); 9 10 static int mpx_test(int argc,const char ** argv)11mpx_test (int argc, const char **argv) 12 { 13 char ** src = (char **)malloc (sizeof (char *) * N); 14 char ** dst = (char **)malloc (sizeof (char *) * N); 15 int i; 16 17 for (i = 0; i < N; i++) 18 src[i] = __bnd_set_ptr_bounds (argv[0] + i, i + 1); 19 20 __builtin_memcpy(dst, src, sizeof (char *) * N); 21 22 for (i = 0; i < N; i++) 23 { 24 char *p = dst[i]; 25 if (p != argv[0] + i 26 || __bnd_get_ptr_lbound (p) != p 27 || __bnd_get_ptr_ubound (p) != p + i) 28 abort (); 29 } 30 31 return 0; 32 } 33