(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
asan/
pointer-subtract-1.c
       1  /* { dg-do run } */
       2  /* { dg-set-target-env-var ASAN_OPTIONS "detect_invalid_pointer_pairs=2 halt_on_error=0" } */
       3  /* { dg-options "-fsanitize=address,pointer-subtract" } */
       4  
       5  volatile __PTRDIFF_TYPE__ v;
       6  
       7  __attribute__((noipa)) void
       8  foo (char *p, char *q)
       9  {
      10    v = p - q;
      11  }
      12  
      13  char global1[100] = {}, global2[100] = {};
      14  
      15  int
      16  main ()
      17  {
      18    /* Heap allocated memory.  */
      19    char *heap1 = (char *)__builtin_malloc (42);
      20    char *heap2 = (char *)__builtin_malloc (42);
      21  
      22    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      23    foo (heap1, heap2);
      24  
      25    /* Global variables.  */
      26    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      27    foo (&global1[0], &global2[10]);
      28  
      29    /* Stack variables.  */
      30    char stack1, stack2;
      31    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      32    foo (&stack1, &stack2);
      33  
      34    /* Mixtures.  */
      35    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      36    foo (heap1, &stack1);
      37    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      38    foo (heap1, &global1[0]);
      39    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair" } */
      40    foo (&stack1, &global1[0]);
      41  
      42    __builtin_free (heap1);
      43    __builtin_free (heap2);  
      44    return 0;
      45  }