| /* { dg-do run } */ |
| /* { dg-set-target-env-var ASAN_OPTIONS "detect_invalid_pointer_pairs=2 halt_on_error=1" } */ |
| /* { dg-options "-fsanitize=address,pointer-subtract" } */ |
| |
| volatile __PTRDIFF_TYPE__ v; |
| |
| void |
| bar (char *p, char *q) |
| { |
| v = q - p; |
| v = p - q; |
| } |
| |
| char global[10000] = {}; |
| |
| int |
| main () |
| { |
| /* Heap allocated memory. */ |
| char *p = (char *)__builtin_malloc (42); |
| bar (p, p + 20); |
| __builtin_free (p); |
| |
| /* Global variable. */ |
| bar (&global[0], &global[100]); |
| bar (&global[1000], &global[9000]); |
| bar (&global[500], &global[10]); |
| bar (&global[0], &global[10000]); |
| |
| /* Stack variable. */ |
| char stack[10000]; |
| bar (&stack[0], &stack[100]); |
| bar (&stack[1000], &stack[9000]); |
| bar (&stack[500], &stack[10]); |
| |
| return 0; |
| } |