diff options
author | Vitaly Buka <vitalybuka@google.com> | 2017-06-24 01:40:41 +0000 |
---|---|---|
committer | Vitaly Buka <vitalybuka@google.com> | 2017-06-24 01:40:41 +0000 |
commit | bc311bbb04f823ee9d58261111a4455a0354c358 (patch) | |
tree | d81eda120c176a1d8a0f8d647780965d68cee226 | |
parent | 37a2e2e98baf49fd965bebb2c9c9b1a7b0428109 (diff) | |
download | compiler-rt-upstream-mirror.tar.gz |
[asan] Regression test for PR33372upstream-mirror
Reviewers: eugenis
Subscribers: kubamracek, llvm-commits
Differential Revision: https://reviews.llvm.org/D34315
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@306195 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/asan/TestCases/pr33372.cc | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/test/asan/TestCases/pr33372.cc b/test/asan/TestCases/pr33372.cc new file mode 100644 index 000000000..a4b606e02 --- /dev/null +++ b/test/asan/TestCases/pr33372.cc @@ -0,0 +1,39 @@ +// RUN: %clangxx_asan -O0 -std=c++11 %s -o %t && %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan -O1 -std=c++11 %s -o %t && %run %t 2>&1 | FileCheck %s +// RUN: %clangxx_asan -O2 -std=c++11 %s -o %t && %run %t 2>&1 | FileCheck %s + +// Test that we do not detect false buffer overflows cased by optimization when +// when local variable replaced by a smaller global constant. +// https://bugs.llvm.org/show_bug.cgi?id=33372 + +#include <stdio.h> +#include <string.h> + +struct A { int x, y, z; }; +struct B { A a; /*gap*/ long b; }; +B *bb; + +void test1() { + A a1 = {1, 1, 2}; + B b1 = {a1, 6}; + bb = new B(b1); +} + +const char KKK[] = {1, 1, 2}; +char bbb[100000]; + +void test2() { + char cc[sizeof(bbb)]; + memcpy(cc, KKK , sizeof(KKK)); + memcpy(bbb, cc, sizeof(bbb)); +} + +int main(int argc, char *argv[]) { + test1(); + test2(); + printf("PASSED"); + return 0; +} + +// CHECK-NOT: ERROR: AddressSanitizer +// CHECK: PASSED |