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 10f1 (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 24f2 (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 39f3 (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 49int 50main () 51{ 52 f1 (N - 1); 53 f2 (N - 1); 54 f3 (N - 1); 55 return 0; 56} 57