1 /* PR sanitizer/71498 */
2 /* { dg-do run } */
3 /* { dg-options "-fsanitize=bounds -Wno-array-bounds" } */
4 /* { dg-options "-fsanitize=bounds -Wno-array-bounds -Wno-volatile" { target c++ } } */
5 
6 struct S { int a[100]; int b, c; } s;
7 
8 __attribute__((noinline, noclone)) int
foo(int x)9 foo (int x)
10 {
11   return s.a[x];
12 }
13 
14 __attribute__((noinline, noclone)) int
bar(int x)15 bar (int x)
16 {
17   static int *d = &s.a[99];
18   asm volatile ("" : : "r" (&d));
19   return s.a[x];
20 }
21 
22 int
main()23 main ()
24 {
25   volatile int a = 0;
26   a += foo (100);
27   a += bar (100);
28   return 0;
29 }
30 
31 /* { dg-output "index 100 out of bounds for type 'int \\\[100\\\]'\[^\n\r]*(\n|\r\n|\r)" } */
32 /* { dg-output "\[^\n\r]*index 100 out of bounds for type 'int \\\[100\\\]'\[^\n\r]*(\n|\r\n|\r)" } */
33