16d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// RUN: %clangxx_asan -O0 %s -o %t && %run %t 2>&1 | FileCheck %s 26d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 36d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <sanitizer/asan_interface.h> 46d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 56d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesint global; 66d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 76d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesint main(int argc, char *argv[]) { 86d1862363c88c183b0ed7740fca876342cf0474bStephen Hines int stack; 96d1862363c88c183b0ed7740fca876342cf0474bStephen Hines int *heap = new int[100]; 106d1862363c88c183b0ed7740fca876342cf0474bStephen Hines __asan_describe_address(heap); 116d1862363c88c183b0ed7740fca876342cf0474bStephen Hines // CHECK: {{.*}} is located 0 bytes inside of 400-byte region 126d1862363c88c183b0ed7740fca876342cf0474bStephen Hines // CHECK: allocated by thread T{{.*}} here 136d1862363c88c183b0ed7740fca876342cf0474bStephen Hines __asan_describe_address(&stack); 146d1862363c88c183b0ed7740fca876342cf0474bStephen Hines // CHECK: Address {{.*}} is located in stack of thread T{{.*}} at offset {{.*}} 156d1862363c88c183b0ed7740fca876342cf0474bStephen Hines __asan_describe_address(&global); 166d1862363c88c183b0ed7740fca876342cf0474bStephen Hines // CHECK: {{.*}} is located 0 bytes inside of global variable 'global' 176d1862363c88c183b0ed7740fca876342cf0474bStephen Hines delete[] heap; 186d1862363c88c183b0ed7740fca876342cf0474bStephen Hines return 0; 196d1862363c88c183b0ed7740fca876342cf0474bStephen Hines} 20