summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2012-11-12 14:03:00 +0000
committerAlexey Samsonov <samsonov@google.com>2012-11-12 14:03:00 +0000
commitc835b9e4a3858d8e19e09e67827f48f93b456abd (patch)
tree237f5f536bb796087b6d48492465391d2d1e2ae6
parentb3e91f6ae075ca04a8f7862782d595c363496ac7 (diff)
downloadbcm5719-llvm-c835b9e4a3858d8e19e09e67827f48f93b456abd.tar.gz
bcm5719-llvm-c835b9e4a3858d8e19e09e67827f48f93b456abd.zip
[ASan] test blacklist functionality for global-init-order checker (r167725)
llvm-svn: 167727
-rw-r--r--compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist-extra.cc15
-rw-r--r--compiler-rt/lib/asan/lit_tests/Helpers/initialization-blacklist.txt2
-rw-r--r--compiler-rt/lib/asan/lit_tests/initialization-blacklist.cc32
3 files changed, 49 insertions, 0 deletions
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 00000000000..09aed2112d5
--- /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 00000000000..c5f6610937f
--- /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 00000000000..a505779ac92
--- /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;
+}
OpenPOWER on IntegriCloud