1 /* { dg-do run } */
2 /* { dg-set-target-env-var ASAN_OPTIONS "detect_invalid_pointer_pairs=2 halt_on_error=1" } */
3 /* { dg-options "-fsanitize=address,pointer-subtract" } */
4 
5 volatile __PTRDIFF_TYPE__ v;
6 
7 void
bar(char * p,char * q)8 bar (char *p, char *q)
9 {
10   v = q - p;
11   v = p - q;
12 }
13 
14 char global[10000] = {};
15 
16 int
main()17 main ()
18 {
19   /* Heap allocated memory.  */
20   char *p = (char *)__builtin_malloc (42);
21   bar (p, p + 20);
22   __builtin_free (p);
23 
24   /* Global variable.  */
25   bar (&global[0], &global[100]);
26   bar (&global[1000], &global[9000]);
27   bar (&global[500], &global[10]);
28   bar (&global[0], &global[10000]);
29 
30   /* Stack variable.  */
31   char stack[10000];
32   bar (&stack[0], &stack[100]);
33   bar (&stack[1000], &stack[9000]);
34   bar (&stack[500], &stack[10]);
35 
36   return 0;
37 }
38