1*882ce178SVitaly Buka // RUN: %clangxx_asan -O1 -fsanitize-address-use-after-scope %s -o %t && not %run %t 2>&1 | FileCheck %s
2673dc3d4SNico Weber 
3673dc3d4SNico Weber struct IntHolder {
4673dc3d4SNico Weber   int val;
5673dc3d4SNico Weber };
6673dc3d4SNico Weber 
7673dc3d4SNico Weber const IntHolder *saved;
8673dc3d4SNico Weber 
save(const IntHolder & holder)95ee902bbSJinsong Ji __attribute__((noinline)) void save(const IntHolder &holder) {
10673dc3d4SNico Weber   saved = &holder;
11673dc3d4SNico Weber }
12673dc3d4SNico Weber 
main(int argc,char * argv[])13673dc3d4SNico Weber int main(int argc, char *argv[]) {
14673dc3d4SNico Weber   save({argc});
15673dc3d4SNico Weber   int x = saved->val;  // BOOM
16673dc3d4SNico Weber   // CHECK: ERROR: AddressSanitizer: stack-use-after-scope
17673dc3d4SNico Weber   // CHECK:  #0 0x{{.*}} in main {{.*}}use-after-scope-temp.cpp:[[@LINE-2]]
18673dc3d4SNico Weber   return x;
19673dc3d4SNico Weber }
20