diff options
Diffstat (limited to 'clang/test')
7 files changed, 58 insertions, 2 deletions
diff --git a/clang/test/CodeGen/Inputs/sanitizer-special-case-list.sanitized.txt b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.sanitized.txt new file mode 100644 index 00000000000..a2afde027b4 --- /dev/null +++ b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.sanitized.txt @@ -0,0 +1,4 @@ +[unsigned-integer-overflow] +fun:*cfi* +[cfi] +fun:*overflow* diff --git a/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized1.txt b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized1.txt new file mode 100644 index 00000000000..45ad57bbebf --- /dev/null +++ b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized1.txt @@ -0,0 +1,2 @@ +fun:*cfi* +fun:*overflow* diff --git a/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized2.txt b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized2.txt new file mode 100644 index 00000000000..375b246f16c --- /dev/null +++ b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized2.txt @@ -0,0 +1,4 @@ +[cfi] +fun:*cfi* +[unsigned-integer-overflow] +fun:*overflow* diff --git a/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized3.txt b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized3.txt new file mode 100644 index 00000000000..b038fee52b2 --- /dev/null +++ b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized3.txt @@ -0,0 +1,4 @@ +[cfi-icall] +fun:*cfi* +[unsigned-integer-overflow] +fun:*overflow* diff --git a/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized4.txt b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized4.txt new file mode 100644 index 00000000000..b31747ec3e1 --- /dev/null +++ b/clang/test/CodeGen/Inputs/sanitizer-special-case-list.unsanitized4.txt @@ -0,0 +1,4 @@ +[c*] +fun:*cfi* +[u*] +fun:*overflow* diff --git a/clang/test/CodeGen/sanitizer-special-case-list.c b/clang/test/CodeGen/sanitizer-special-case-list.c new file mode 100644 index 00000000000..45cfecd7efb --- /dev/null +++ b/clang/test/CodeGen/sanitizer-special-case-list.c @@ -0,0 +1,26 @@ +// Verify that blacklist sections correctly select sanitizers to apply blacklist entries to. +// +// RUN: %clang_cc1 -fsanitize=unsigned-integer-overflow,cfi-icall -fsanitize-blacklist=%S/Inputs/sanitizer-special-case-list.unsanitized1.txt -emit-llvm %s -o - | FileCheck %s --check-prefix=UNSANITIZED +// RUN: %clang_cc1 -fsanitize=unsigned-integer-overflow,cfi-icall -fsanitize-blacklist=%S/Inputs/sanitizer-special-case-list.unsanitized2.txt -emit-llvm %s -o - | FileCheck %s --check-prefix=UNSANITIZED +// RUN: %clang_cc1 -fsanitize=unsigned-integer-overflow,cfi-icall -fsanitize-blacklist=%S/Inputs/sanitizer-special-case-list.unsanitized3.txt -emit-llvm %s -o - | FileCheck %s --check-prefix=UNSANITIZED +// RUN: %clang_cc1 -fsanitize=unsigned-integer-overflow,cfi-icall -fsanitize-blacklist=%S/Inputs/sanitizer-special-case-list.unsanitized4.txt -emit-llvm %s -o - | FileCheck %s --check-prefix=UNSANITIZED +// +// RUN: %clang_cc1 -fsanitize=unsigned-integer-overflow,cfi-icall -fsanitize-blacklist=%S/Inputs/sanitizer-special-case-list.sanitized.txt -emit-llvm %s -o - | FileCheck %s --check-prefix=SANITIZED + +unsigned i; + +// SANITIZED: @overflow +// UNSANITIZED: @overflow +unsigned overflow() { + // SANITIZED: call {{.*}}void @__ubsan + // UNSANITIZED-NOT: call {{.*}}void @__ubsan + return i * 37; +} + +// SANITIZED: @cfi +// UNSANITIZED: @cfi +void cfi(void (*fp)()) { + // SANITIZED: llvm.type.test + // UNSANITIZED-NOT: llvm.type.test + fp(); +} diff --git a/clang/test/CodeGenCXX/cfi-blacklist.cpp b/clang/test/CodeGenCXX/cfi-blacklist.cpp index af8a10601d2..c01e5fcd926 100644 --- a/clang/test/CodeGenCXX/cfi-blacklist.cpp +++ b/clang/test/CodeGenCXX/cfi-blacklist.cpp @@ -1,6 +1,18 @@ // RUN: %clang_cc1 -triple %itanium_abi_triple -fvisibility hidden -fms-extensions -fsanitize=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOBL %s -// RUN: echo "type:std::*" > %t.txt -// RUN: %clang_cc1 -triple %itanium_abi_triple -fvisibility hidden -fms-extensions -fsanitize=cfi-vcall -fsanitize-blacklist=%t.txt -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOSTD %s + +// Check that blacklisting cfi and cfi-vcall work correctly +// RUN: echo "[cfi-vcall]" > %t.vcall.txt +// RUN: echo "type:std::*" >> %t.vcall.txt +// RUN: %clang_cc1 -triple %itanium_abi_triple -fvisibility hidden -fms-extensions -fsanitize=cfi-vcall -fsanitize-blacklist=%t.vcall.txt -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOSTD %s +// +// RUN: echo "[cfi]" > %t.cfi.txt +// RUN: echo "type:std::*" >> %t.cfi.txt +// RUN: %clang_cc1 -triple %itanium_abi_triple -fvisibility hidden -fms-extensions -fsanitize=cfi-vcall -fsanitize-blacklist=%t.cfi.txt -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOSTD %s + +// Check that blacklisting non-vcall modes does not affect vcalls +// RUN: echo "[cfi-icall|cfi-nvcall|cfi-cast-strict|cfi-derived-cast|cfi-unrelated-cast]" > %t.other.txt +// RUN: echo "type:std::*" >> %t.other.txt +// RUN: %clang_cc1 -triple %itanium_abi_triple -fvisibility hidden -fms-extensions -fsanitize=cfi-vcall -fsanitize-blacklist=%t.other.txt -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOBL %s struct S1 { virtual void f(); |