diff options
author | Fangrui Song <maskray@google.com> | 2019-08-02 06:07:05 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-08-02 06:07:05 +0000 |
commit | 871e3822d6679af8f7cfa763b65258e47f2d8d69 (patch) | |
tree | 10a44a1d29f910a8a20395f949d24063021d4651 /test/msan/stack-origin2.cpp | |
parent | 47a529b8d28fde062f77140eaf027047150fed8e (diff) | |
download | compiler-rt-871e3822d6679af8f7cfa763b65258e47f2d8d69.tar.gz |
compiler-rt: Rename .cc file in test/msan to .cpp
Like r367463, but for test/msan.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@367653 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/msan/stack-origin2.cpp')
-rw-r--r-- | test/msan/stack-origin2.cpp | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/test/msan/stack-origin2.cpp b/test/msan/stack-origin2.cpp new file mode 100644 index 000000000..2ef3e180c --- /dev/null +++ b/test/msan/stack-origin2.cpp @@ -0,0 +1,41 @@ +// Test that on the second entry to a function the origins are still right. + +// RUN: %clangxx_msan -O0 %s -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out +// RUN: %clangxx_msan -O1 %s -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out +// RUN: %clangxx_msan -O2 %s -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out +// RUN: %clangxx_msan -O3 %s -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out + +// RUN: %clangxx_msan -fsanitize-memory-track-origins -O0 %s -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out && FileCheck %s --check-prefix=CHECK-ORIGINS < %t.out +// RUN: %clangxx_msan -fsanitize-memory-track-origins -O1 %s -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out && FileCheck %s --check-prefix=CHECK-ORIGINS < %t.out +// RUN: %clangxx_msan -fsanitize-memory-track-origins -O2 %s -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out && FileCheck %s --check-prefix=CHECK-ORIGINS < %t.out +// RUN: %clangxx_msan -fsanitize-memory-track-origins -O3 %s -o %t && not %run %t >%t.out 2>&1 +// RUN: FileCheck %s < %t.out && FileCheck %s --check-prefix=CHECK-ORIGINS < %t.out + +#include <stdlib.h> + +extern "C" +int f(int depth) { + if (depth) return f(depth - 1); + + int x; + int *volatile p = &x; + return *p; +} + +int main(int argc, char **argv) { + return f(1); + // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value + // CHECK: {{#0 0x.* in main .*stack-origin2.cpp:}}[[@LINE-2]] + + // CHECK-ORIGINS: Uninitialized value was created by an allocation of 'x' in the stack frame of function 'f' + // CHECK-ORIGINS: {{#0 0x.* in f .*stack-origin2.cpp:}}[[@LINE-14]] + + // CHECK: SUMMARY: MemorySanitizer: use-of-uninitialized-value {{.*stack-origin2.cpp:.* main}} +} |