Home | History | Annotate | Download | only in scudo
      1 // RUN: %clang_scudo %s -o %t
      2 // RUN: not %run %t malloc   2>&1 | FileCheck %s
      3 // RUN: not %run %t new      2>&1 | FileCheck %s
      4 // RUN: not %run %t newarray 2>&1 | FileCheck %s
      5 // RUN: not %run %t memalign 2>&1 | FileCheck %s
      6 
      7 // Tests double-free error on pointers allocated with different allocation
      8 // functions.
      9 
     10 #include <assert.h>
     11 #include <stdlib.h>
     12 #include <string.h>
     13 
     14 int main(int argc, char **argv)
     15 {
     16   assert(argc == 2);
     17   if (!strcmp(argv[1], "malloc")) {
     18     void *p = malloc(sizeof(int));
     19     if (!p)
     20       return 1;
     21     free(p);
     22     free(p);
     23   }
     24   if (!strcmp(argv[1], "new")) {
     25     int *p = new int;
     26     if (!p)
     27       return 1;
     28     delete p;
     29     delete p;
     30   }
     31   if (!strcmp(argv[1], "newarray")) {
     32     int *p = new int[8];
     33     if (!p)
     34       return 1;
     35     delete[] p;
     36     delete[] p;
     37   }
     38   if (!strcmp(argv[1], "memalign")) {
     39     void *p = nullptr;
     40     posix_memalign(&p, 0x100, sizeof(int));
     41     if (!p)
     42       return 1;
     43     free(p);
     44     free(p);
     45   }
     46   return 0;
     47 }
     48 
     49 // CHECK: ERROR: invalid chunk state when deallocating address
     50