]>
Commit | Line | Data |
---|---|---|
5bcae85e SL |
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 | ||
7cac9316 | 49 | // CHECK: ERROR: invalid chunk state |