reference, declaration → definition 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 |