(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
asan/
pointer-compare-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-compare" } */
       4  
       5  /* FIXME: remove me after PR sanitizer/82501 is resolved.  */
       6  /* { dg-additional-options "-fno-section-anchors" } */
       7  /* { dg-additional-options "-msdata=none" { target { powerpc*-*-* } } } */
       8  
       9  volatile int v;
      10  
      11  __attribute__((noipa)) void
      12  foo (char *p, char *q)
      13  {
      14    v = p > q;
      15  }
      16  
      17  char __attribute__((used)) global1[100] = {};
      18  char __attribute__((used)) global2[100] = {};
      19  char __attribute__((used)) smallest_global[5] = {};
      20  char __attribute__((used)) small_global[7] = {};
      21  char __attribute__((used)) little_global[10] = {};
      22  char __attribute__((used)) medium_global[4000] = {};
      23  char __attribute__((used)) large_global[5000] = {};
      24  char __attribute__((used)) largest_global[6000] = {};
      25  
      26  int
      27  main ()
      28  {
      29    /* Heap allocated memory.  */
      30    char *heap1 = (char *)__builtin_malloc (42);
      31    char *heap2 = (char *)__builtin_malloc (42);
      32  
      33    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      34    foo (heap1, heap2);
      35    __builtin_free (heap1);
      36    __builtin_free (heap2);
      37  
      38    heap1 = (char *)__builtin_malloc (1024);
      39    __asm ("" : "+g" (heap1));
      40    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      41    foo (heap1, heap1 + 1025);
      42    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      43    foo (heap1 + 1024, heap1 + 1025);
      44    __builtin_free (heap1);
      45  
      46    heap1 = (char *)__builtin_malloc (4096);
      47    __asm ("" : "+g" (heap1));
      48    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      49    foo (heap1, heap1 + 4097);
      50    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      51    foo (heap1, 0);
      52  
      53    /* Global variables.  */
      54    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      55    foo (&global1[0], &global2[10]);
      56  
      57    char *p = &small_global[0];
      58    __asm ("" : "+g" (p));
      59    foo (p, p); /* OK */
      60    foo (p, p + 7); /* OK */
      61    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      62    foo (p, p + 8);
      63    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      64    foo (p - 1, p);
      65    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      66    foo (p, p - 1);
      67    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      68    foo (p - 1, p + 8);
      69  
      70    p = &large_global[0];
      71    __asm ("" : "+g" (p));
      72    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      73    foo (p - 1, p);
      74    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      75    foo (p, p - 1);
      76    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      77    foo (p, &global1[0]);
      78    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      79    foo (p, &small_global[0]);
      80    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      81    foo (p, 0);
      82  
      83    /* Stack variables.  */
      84    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      85    char stack1, stack2;
      86    foo (&stack1, &stack2);
      87  
      88    /* Mixtures.  */
      89    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      90    foo (heap1, &stack1);
      91    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      92    foo (heap1, &global1[0]);
      93    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair.*" } */
      94    foo (&stack1, &global1[0]);
      95    /* { dg-output "ERROR: AddressSanitizer: invalid-pointer-pair" } */
      96    foo (&stack1, 0);
      97    __builtin_free (heap1);
      98  
      99    return 0;
     100  }