| OLD | NEW |
| 1 ; Test that calls to malloc() and free() are replaced | 1 ; Test that calls to malloc() and free() are replaced |
| 2 | 2 |
| 3 ; REQUIRES: allow_dump | 3 ; REQUIRES: allow_dump |
| 4 | 4 |
| 5 ; RUN: %p2i -i %s --args -verbose=inst -threads=0 -fsanitize-address \ | 5 ; RUN: %p2i -i %s --args -verbose=inst -threads=0 -fsanitize-address \ |
| 6 ; RUN: --allow-externally-defined-symbols | FileCheck --check-prefix=DUMP %s | 6 ; RUN: --allow-externally-defined-symbols | FileCheck --check-prefix=DUMP %s |
| 7 | 7 |
| 8 declare external i32 @malloc(i32) | 8 declare external i32 @malloc(i32) |
| 9 declare external i32 @calloc(i32, i32) |
| 10 declare external i32 @realloc(i32, i32) |
| 9 declare external void @free(i32) | 11 declare external void @free(i32) |
| 10 | 12 |
| 11 define internal void @func() { | 13 define internal void @func() { |
| 12 %ptr = call i32 @malloc(i32 42) | 14 %ptr1 = call i32 @malloc(i32 42) |
| 13 call void @free(i32 %ptr) | 15 %ptr2 = call i32 @calloc(i32 12, i32 42) |
| 16 %ptr3 = call i32 @realloc(i32 0, i32 100) |
| 17 call void @free(i32 %ptr1) |
| 14 ret void | 18 ret void |
| 15 } | 19 } |
| 16 | 20 |
| 17 ; DUMP-LABEL: ================ Instrumented CFG ================ | 21 ; DUMP-LABEL: ================ Instrumented CFG ================ |
| 18 ; DUMP-NEXT: define internal void @func() { | 22 ; DUMP-NEXT: define internal void @func() { |
| 19 ; DUMP-NEXT: __0: | 23 ; DUMP-NEXT: __0: |
| 20 ; DUMP-NEXT: %ptr = call i32 @__asan_malloc(i32 42) | 24 ; DUMP-NEXT: %ptr1 = call i32 @__asan_malloc(i32 42) |
| 21 ; DUMP-NEXT: call void @__asan_free(i32 %ptr) | 25 ; DUMP-NEXT: %ptr2 = call i32 @__asan_calloc(i32 12, i32 42) |
| 26 ; DUMP-NEXT: %ptr3 = call i32 @__asan_realloc(i32 0, i32 100) |
| 27 ; DUMP-NEXT: call void @__asan_free(i32 %ptr1) |
| 22 ; DUMP-NEXT: ret void | 28 ; DUMP-NEXT: ret void |
| 23 ; DUMP-NEXT: } | 29 ; DUMP-NEXT: } |
| OLD | NEW |