[ASan] Fix __asan_describe_address and add a test for it.
llvm-svn: 213583
This commit is contained in:
parent
d32803b669
commit
a89ad664b1
|
@ -945,7 +945,10 @@ void NOINLINE __asan_set_error_report_callback(void (*callback)(const char*)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void __asan_describe_address(uptr addr) {
|
void __asan_describe_address(uptr addr) {
|
||||||
|
// Thread registry must be locked while we're describing an address.
|
||||||
|
asanThreadRegistry().Lock();
|
||||||
DescribeAddress(addr, 1);
|
DescribeAddress(addr, 1);
|
||||||
|
asanThreadRegistry().Unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
// RUN: %clangxx_asan -O0 %s -o %t && %run %t 2>&1 | FileCheck %s
|
||||||
|
|
||||||
|
#include <sanitizer/asan_interface.h>
|
||||||
|
|
||||||
|
int global;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
int stack;
|
||||||
|
int *heap = new int[100];
|
||||||
|
__asan_describe_address(heap);
|
||||||
|
// CHECK: {{.*}} is located 0 bytes inside of 400-byte region
|
||||||
|
// CHECK: allocated by thread T{{.*}} here
|
||||||
|
__asan_describe_address(&stack);
|
||||||
|
// CHECK: Address {{.*}} is located in stack of thread T{{.*}} at offset {{.*}}
|
||||||
|
__asan_describe_address(&global);
|
||||||
|
// CHECK: {{.*}} is located 0 bytes inside of global variable 'global'
|
||||||
|
delete[] heap;
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue