1*673dc3d4SNico Weber // RUN: %clangxx_asan -O1 -fsanitize-address-use-after-scope %s -o %t && \
2*673dc3d4SNico Weber // RUN:     not %run %t 2>&1 | FileCheck %s
3*673dc3d4SNico Weber 
4*673dc3d4SNico Weber #include <stdlib.h>
5*673dc3d4SNico Weber 
6*673dc3d4SNico Weber int *p;
7*673dc3d4SNico Weber 
main()8*673dc3d4SNico Weber int main() {
9*673dc3d4SNico Weber   for (int i = 0; i < 3; i++) {
10*673dc3d4SNico Weber     int x;
11*673dc3d4SNico Weber     p = &x;
12*673dc3d4SNico Weber   }
13*673dc3d4SNico Weber   return *p;  // BOOM
14*673dc3d4SNico Weber   // CHECK: ERROR: AddressSanitizer: stack-use-after-scope
15*673dc3d4SNico Weber   // CHECK:  #0 0x{{.*}} in main {{.*}}use-after-scope-loop-removed.cpp:[[@LINE-2]]
16*673dc3d4SNico Weber   // CHECK: Address 0x{{.*}} is located in stack of thread T{{.*}} at offset [[OFFSET:[^ ]+]] in frame
17*673dc3d4SNico Weber   // {{\[}}[[OFFSET]], {{[0-9]+}}) 'x'
18*673dc3d4SNico Weber }
19