summaryrefslogtreecommitdiff
path: root/test/ubsan_minimal/TestCases/implicit-signed-integer-truncation.c
diff options
context:
space:
mode:
authorRoman Lebedev <lebedev.ri@gmail.com>2018-10-11 09:09:52 +0000
committerRoman Lebedev <lebedev.ri@gmail.com>2018-10-11 09:09:52 +0000
commit920444af7f95afd617861fc44b6f86aa3f317f72 (patch)
treeddbc27c517cb05df25f908bf362e34adcd46f082 /test/ubsan_minimal/TestCases/implicit-signed-integer-truncation.c
parent2adb5dbccefd76de481fe4133f95f4c6b2eb0da4 (diff)
downloadcompiler-rt-920444af7f95afd617861fc44b6f86aa3f317f72.tar.gz
[compiler-rt][ubsan] Split Implicit Integer Truncation Sanitizer into unsigned and signed checks
Summary: This is compiler-rt part. clang part is D50901. Reviewers: rsmith, vsk, filcab, Sanitizers Reviewed by: filcab Differential Revision: https://reviews.llvm.org/D50902 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@344231 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/ubsan_minimal/TestCases/implicit-signed-integer-truncation.c')
-rw-r--r--test/ubsan_minimal/TestCases/implicit-signed-integer-truncation.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/ubsan_minimal/TestCases/implicit-signed-integer-truncation.c b/test/ubsan_minimal/TestCases/implicit-signed-integer-truncation.c
new file mode 100644
index 000000000..9677407e0
--- /dev/null
+++ b/test/ubsan_minimal/TestCases/implicit-signed-integer-truncation.c
@@ -0,0 +1,25 @@
+// RUN: %clang -fsanitize=implicit-signed-integer-truncation %s -o %t && %run %t 2>&1 | FileCheck %s --check-prefixes=CHECK
+
+#include <stdint.h>
+
+int main() {
+// CHECK-NOT: implicit-conversion
+
+ // Negative tests. Even if they produce unexpected results, this sanitizer does not care.
+ int8_t n0 = (~((uint32_t)(0))); // ~0 -> -1, but do not warn.
+ uint8_t n2 = 128;
+ uint8_t n3 = 255;
+ // Bools do not count
+ _Bool b0 = (~((uint32_t)(0)));
+ _Bool b1 = 255;
+
+ // Explicit and-ing of bits will silence it.
+ uint8_t nc0 = ((int32_t)(-1)) & 255;
+
+ // Positive tests.
+ uint8_t t0 = (int32_t)(-1);
+// CHECK: implicit-conversion
+// CHECK-NOT: implicit-conversion
+
+ return 0;
+}