1  /* { dg-do run } */
       2  /* { dg-skip-if "" { *-*-* } { "*" } { "-O2" } } */
       3  /* { dg-options "-fsanitize=object-size -fno-sanitize-recover=object-size" } */
       4  
       5  /* Test valid uses.  */
       6  
       7  #define N 20
       8  
       9  __attribute__((noinline, noclone)) void
      10  f1 (int i)
      11  {
      12    volatile int j;
      13    char *p, *orig;
      14    orig = p = (char *) __builtin_calloc (N, 1);
      15    j = *(p + i);
      16    j = p[i];
      17    p++;
      18    j = p[i - 1];
      19    j = *(p + i - 1);
      20    __builtin_free (orig);
      21  }
      22  
      23  __attribute__((noinline, noclone)) void
      24  f2 (int i)
      25  {
      26    volatile int j;
      27    char a[N];
      28    __builtin_memset (a, 0, N);
      29    j = *(a + i);
      30    char *p = a;
      31    j = *(p + i);
      32    j = p[i];
      33    p += 10;
      34    j = *(p + i - 10);
      35    j = p[i - 10];
      36  }
      37  
      38  __attribute__((noinline, noclone)) void
      39  f3 (int i)
      40  {
      41    volatile int j;
      42    int *p = (int *) __builtin_calloc (N, sizeof (*p));
      43    int *o = &p[i];
      44    j = *o;
      45    j = o[0];
      46    __builtin_free (p);
      47  }
      48  
      49  int
      50  main ()
      51  {
      52    f1 (N - 1);
      53    f2 (N - 1);
      54    f3 (N - 1);
      55    return 0;
      56  }