use-after-scope-dtor-order.cc revision 6a211c5814e25d6745a5058cc0e499e5235d3821
1// RUN: %clangxx_asan -O0 -fsanitize=use-after-scope %s -o %t && \
2// RUN:     not %run %t 2>&1 | FileCheck %s
3// XFAIL: *
4#include <stdio.h>
5
6struct IntHolder {
7  explicit IntHolder(int *val = 0) : val_(val) { }
8  ~IntHolder() {
9    printf("Value: %d\n", *val_);  // BOOM
10    // CHECK: ERROR: AddressSanitizer: stack-use-after-scope
11    // CHECK:  #0 0x{{.*}} in IntHolder::~IntHolder{{.*}}use-after-scope-dtor-order.cc:[[@LINE-2]]
12  }
13  void set(int *val) { val_ = val; }
14  int *get() { return val_; }
15
16  int *val_;
17};
18
19int main(int argc, char *argv[]) {
20  // It is incorrect to use "x" int IntHolder destructor, because "x" is
21  // "destroyed" earlier as it's declared later.
22  IntHolder holder;
23  int x = argc;
24  holder.set(&x);
25  return 0;
26}
27