1*673dc3d4SNico Weber // RUN: %clangxx_asan -O0 %s -o %t 2*673dc3d4SNico Weber // RUN: not %run %t 2>&1 | FileCheck %s 3*673dc3d4SNico Weber 4*673dc3d4SNico Weber struct A { 5*673dc3d4SNico Weber int a[8]; 6*673dc3d4SNico Weber }; 7*673dc3d4SNico Weber bar(A * a)8*673dc3d4SNico Weberint bar(A *a) { 9*673dc3d4SNico Weber int *volatile ptr = &a->a[0]; 10*673dc3d4SNico Weber return *(ptr - 1); 11*673dc3d4SNico Weber } 12*673dc3d4SNico Weber foo(A a)13*673dc3d4SNico Webervoid foo(A a) { 14*673dc3d4SNico Weber bar(&a); 15*673dc3d4SNico Weber } 16*673dc3d4SNico Weber main()17*673dc3d4SNico Weberint main() { 18*673dc3d4SNico Weber foo(A()); 19*673dc3d4SNico Weber } 20*673dc3d4SNico Weber 21*673dc3d4SNico Weber // CHECK: ERROR: AddressSanitizer: stack-buffer-underflow 22*673dc3d4SNico Weber // CHECK: READ of size 4 at 23*673dc3d4SNico Weber // CHECK: is located in stack of thread 24