1 // RUN: %clang_hwasan -O0 -DNEGATIVE %s -o %t && %run %t 2>&1 2 // RUN: %clang_hwasan -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s 3 4 // REQUIRES: stable-runtime 5 6 #include <stdlib.h> 7 #include <assert.h> 8 #include <sanitizer/hwasan_interface.h> 9 10 __attribute__((noinline)) f(void * caller_frame)11int f(void *caller_frame) { 12 int z = 0; 13 int *volatile p = &z; 14 // Tag of local is never zero. 15 assert(__hwasan_tag_pointer(p, 0) != p); 16 #ifndef NEGATIVE 17 // This will destroy shadow of "z", and the following load will crash. 18 __hwasan_handle_longjmp(caller_frame); 19 #endif 20 return p[0]; 21 } 22 main()23int main() { 24 return f(__builtin_frame_address(0)); 25 // CHECK: READ of size 8 at {{.*}} tags: {{.*}}/00 (ptr/mem) 26 } 27