1*882ce178SVitaly Buka // RUN: %clangxx_asan -O1 -fsanitize-address-use-after-scope %s -o %t && \
2673dc3d4SNico Weber // RUN:     not %run %t 2>&1 | FileCheck %s
3673dc3d4SNico Weber 
4673dc3d4SNico Weber struct IntHolder {
SelfIntHolder55ee902bbSJinsong Ji   __attribute__((noinline)) const IntHolder &Self() const {
6673dc3d4SNico Weber     return *this;
7673dc3d4SNico Weber   }
8673dc3d4SNico Weber   int val = 3;
9673dc3d4SNico Weber };
10673dc3d4SNico Weber 
11673dc3d4SNico Weber const IntHolder *saved;
12673dc3d4SNico Weber 
main(int argc,char * argv[])13673dc3d4SNico Weber int main(int argc, char *argv[]) {
14673dc3d4SNico Weber   saved = &IntHolder().Self();
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-temp2.cpp:[[@LINE-2]]
18673dc3d4SNico Weber   return x;
19673dc3d4SNico Weber }
20