1/* { dg-do run } */ 2/* { dg-skip-if "" { *-*-* } { "*" } { "-O2" } } */ 3/* { dg-options "-fsanitize=object-size" } */ 4 5/* Test structures with -fsanitize=object-size. */ 6 7#define N 20 8 9struct S { char *p; int i; }; 10struct T { struct S *s; }; 11 12__attribute__((noinline, noclone)) void 13f1 (int i) 14{ 15 volatile int j; 16 struct S s; 17 s.p = (char *) __builtin_calloc (N, 1); 18 j = s.p[i]; 19 j = *(s.p + i); 20 __builtin_free (s.p); 21} 22 23/* { dg-output "load of address \[^\n\r]* with insufficient space for an object of type 'char'\[^\n\r]*(\n|\r\n|\r)" } */ 24/* { dg-output "\[^\n\r]*note: pointer points here\[^\n\r]*(\n|\r\n|\r)" } */ 25/* { dg-output "\[^\n\r]*\[^\n\r]*(\n|\r\n|\r)" } */ 26/* { dg-output "\[^\n\r]*\\^\[^\n\r]*(\n|\r\n|\r)" } */ 27/* { dg-output "\[^\n\r]*load of address \[^\n\r]* with insufficient space for an object of type 'char'\[^\n\r]*(\n|\r\n|\r)" } */ 28/* { dg-output "\[^\n\r]*note: pointer points here\[^\n\r]*(\n|\r\n|\r)" } */ 29/* { dg-output "\[^\n\r]*\[^\n\r]*(\n|\r\n|\r)" } */ 30/* { dg-output "\[^\n\r]*\\^\[^\n\r]*(\n|\r\n|\r)" } */ 31 32int 33main () 34{ 35 f1 (N); 36 f1 (N - 1); 37 return 0; 38} 39