reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
// Verify that objects passed by value get red zones and that the copy
// constructor is called.
// RUN: %clangxx_asan -O0 %s -o %t
// RUN: not %run %t 2>&1 | FileCheck %s --implicit-check-not \
// RUN:     Assertion{{.*}}failed

// ASan instrumentation can't insert red-zones around inalloca parameters.
// XFAIL: windows-msvc && asan-32-bits

#include <cassert>

class A {
 public:
  A() : me(this) {}
  A(const A &other) : me(this) {
    for (int i = 0; i < 8; ++i) a[i] = other.a[i];
  }

  int a[8];
  A *me;
};

int bar(A *a) {
  int *volatile ptr = &a->a[0];
  return *(ptr - 1);
}

void foo(A a) {
  assert(a.me == &a);
  bar(&a);
}

int main() {
  A a;
  foo(a);
}

// CHECK: ERROR: AddressSanitizer: stack-buffer-overflow
// CHECK: READ of size 4 at
// CHECK: is located in stack of thread