brintos

brintos / llvm-project-archived public Read only

0
0
Text · 815 B · 78f4f8d Raw
41 lines · cpp
1// Verify that objects passed by value get red zones and that the copy2// constructor is called.3// RUN: %clangxx_asan -O0 %s -o %t4// RUN: not %run %t 2>&1 | FileCheck %s --implicit-check-not \5// RUN:     Assertion{{.*}}failed6 7// ASan instrumentation can't insert red-zones around inalloca parameters.8// XFAIL: target={{.*windows-msvc.*}} && asan-32-bits9 10#include <cassert>11 12class A {13 public:14  A() : me(this) {}15  A(const A &other) : me(this) {16    for (int i = 0; i < 8; ++i) a[i] = other.a[i];17  }18 19  int a[8];20  A *me;21};22 23int bar(A *a) {24  int *volatile ptr = &a->a[0];25  return *(ptr - 1);26}27 28void foo(A a) {29  assert(a.me == &a);30  bar(&a);31}32 33int main() {34  A a;35  foo(a);36}37 38// CHECK: ERROR: AddressSanitizer: stack-buffer-overflow39// CHECK: READ of size 4 at40// CHECK: is located in stack of thread41