| /* { dg-do run } */ | 
 | /* { dg-options "-fsanitize=bounds" } */ | 
 |  | 
 | /* Test negative bounds.  */ | 
 |  | 
 | struct S { int a[10]; }; | 
 |  | 
 | __attribute__ ((noinline, noclone)) | 
 | void | 
 | fn1 (void) | 
 | { | 
 |   volatile int i; | 
 |   int m = -1; | 
 |   volatile int a[7]; | 
 |   asm ("" : : "r" (&a) : "memory"); | 
 |   i = a[-1]; | 
 |   asm ("" : : "r" (&a) : "memory"); | 
 |   i = a[m]; | 
 | } | 
 |  | 
 | __attribute__ ((noinline, noclone)) | 
 | void | 
 | fn2 (void) | 
 | { | 
 |   volatile int i; | 
 |   int m = 7; | 
 |   volatile int a[m]; | 
 |   asm ("" : : "r" (&a) : "memory"); | 
 |   i = a[-1]; | 
 | } | 
 |  | 
 | __attribute__ ((noinline, noclone)) | 
 | void | 
 | fn3 (void) | 
 | { | 
 |   volatile int i; | 
 |   volatile struct S s; | 
 |   asm ("" : : "r" (&s.a) : "memory"); | 
 |   i = s.a[-1]; | 
 | } | 
 |  | 
 | int | 
 | main (void) | 
 | { | 
 |   fn1 (); | 
 |   fn2 (); | 
 |   fn3 (); | 
 |   return 0; | 
 | } | 
 |  | 
 | /* { dg-output "index -1 out of bounds for type 'int \\\[7\\\]'\[^\n\r]*(\n|\r\n|\r)" } */ | 
 | /* { dg-output "\[^\n\r]*index -1 out of bounds for type 'int \\\[7\\\]'\[^\n\r]*(\n|\r\n|\r)" } */ | 
 | /* { dg-output "\[^\n\r]*index -1 out of bounds for type 'int \\\[\\\*\\\]'\[^\n\r]*(\n|\r\n|\r)" } */ | 
 | /* { dg-output "\[^\n\r]*index -1 out of bounds for type 'int \\\[10\\\]'" } */ |