From c835b9e4a3858d8e19e09e67827f48f93b456abd Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Mon, 12 Nov 2012 14:03:00 +0000 Subject: [PATCH] [ASan] test blacklist functionality for global-init-order checker (r167725) llvm-svn: 167727 --- .../Helpers/initialization-blacklist-extra.cc | 15 ++++++++++ .../lit_tests/Helpers/initialization-blacklist.txt | 2 ++ .../lib/asan/lit_tests/initialization-blacklist.cc | 32 ++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist-extra.cc create mode 100644 compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist.txt create mode 100644 compiler-rt/lib/asan/lit_tests/initialization-blacklist.cc diff --git a/compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist-extra.cc b/compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist-extra.cc new file mode 100644 index 0000000..09aed21 --- /dev/null +++ b/compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist-extra.cc @@ -0,0 +1,15 @@ +int zero_init() { return 0; } +int badGlobal = zero_init(); +int readBadGlobal() { return badGlobal; } + +namespace badNamespace { +class BadClass { + public: + BadClass() { value = 0; } + int value; +}; +// Global object with non-trivial constructor. +BadClass bad_object; +} // namespace badNamespace + +int accessBadObject() { return badNamespace::bad_object.value; } diff --git a/compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist.txt b/compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist.txt new file mode 100644 index 0000000..c5f6610 --- /dev/null +++ b/compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist.txt @@ -0,0 +1,2 @@ +global-init:*badGlobal* +global-init-type:*badNamespace::BadClass* diff --git a/compiler-rt/lib/asan/lit_tests/initialization-blacklist.cc b/compiler-rt/lib/asan/lit_tests/initialization-blacklist.cc new file mode 100644 index 0000000..a505779 --- /dev/null +++ b/compiler-rt/lib/asan/lit_tests/initialization-blacklist.cc @@ -0,0 +1,32 @@ +// Test for blacklist functionality of initialization-order checker. + +// RUN: %clangxx_asan -m64 -O0 %s %p/Helpers/initialization-blacklist-extra.cc\ +// RUN: -mllvm -asan-blacklist=%p/Helpers/initialization-blacklist.txt \ +// RUN: -mllvm -asan-initialization-order -o %t && %t 2>&1 +// RUN: %clangxx_asan -m64 -O1 %s %p/Helpers/initialization-blacklist-extra.cc\ +// RUN: -mllvm -asan-blacklist=%p/Helpers/initialization-blacklist.txt \ +// RUN: -mllvm -asan-initialization-order -o %t && %t 2>&1 +// RUN: %clangxx_asan -m64 -O2 %s %p/Helpers/initialization-blacklist-extra.cc\ +// RUN: -mllvm -asan-blacklist=%p/Helpers/initialization-blacklist.txt \ +// RUN: -mllvm -asan-initialization-order -o %t && %t 2>&1 +// RUN: %clangxx_asan -m32 -O0 %s %p/Helpers/initialization-blacklist-extra.cc\ +// RUN: -mllvm -asan-blacklist=%p/Helpers/initialization-blacklist.txt \ +// RUN: -mllvm -asan-initialization-order -o %t && %t 2>&1 +// RUN: %clangxx_asan -m32 -O1 %s %p/Helpers/initialization-blacklist-extra.cc\ +// RUN: -mllvm -asan-blacklist=%p/Helpers/initialization-blacklist.txt \ +// RUN: -mllvm -asan-initialization-order -o %t && %t 2>&1 +// RUN: %clangxx_asan -m32 -O2 %s %p/Helpers/initialization-blacklist-extra.cc\ +// RUN: -mllvm -asan-blacklist=%p/Helpers/initialization-blacklist.txt \ +// RUN: -mllvm -asan-initialization-order -o %t && %t 2>&1 + +// Function is defined in another TU. +int readBadGlobal(); +int x = readBadGlobal(); // init-order bug. + +// Function is defined in another TU. +int accessBadObject(); +int y = accessBadObject(); // init-order bug. + +int main(int argc, char **argv) { + return argc + x + y - 1; +} -- 2.7.4