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