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)11 mpx_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