summaryrefslogtreecommitdiff
path: root/test/msan/msan_check_mem_is_initialized.cc
diff options
context:
space:
mode:
Diffstat (limited to 'test/msan/msan_check_mem_is_initialized.cc')
-rw-r--r--test/msan/msan_check_mem_is_initialized.cc28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/msan/msan_check_mem_is_initialized.cc b/test/msan/msan_check_mem_is_initialized.cc
new file mode 100644
index 0000000000000..33558cd2feb27
--- /dev/null
+++ b/test/msan/msan_check_mem_is_initialized.cc
@@ -0,0 +1,28 @@
+// RUN: %clangxx_msan -m64 -O0 -g -DPOSITIVE %s -o %t
+// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK
+// RUN: MSAN_OPTIONS=verbosity=1 not %run %t 2>&1 | \
+// RUN: FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-VERBOSE
+
+// RUN: %clangxx_msan -m64 -O0 -g %s -o %t && %run %t
+
+#include <sanitizer/msan_interface.h>
+
+int main(void) {
+ char p[32] = {};
+ __msan_poison(p + 10, 2);
+
+ __msan_check_mem_is_initialized(p, 10);
+ __msan_check_mem_is_initialized(p + 12, 30);
+#ifdef POSITIVE
+ __msan_check_mem_is_initialized(p + 5, 20);
+ // CHECK: Uninitialized bytes in __msan_check_mem_is_initialized at offset 5 inside [0x{{.*}}, 20)
+ // CHECK-VERBOSE: Shadow map of [0x{{.*}}, 0x{{.*}}), 20 bytes:
+ // CHECK-VERBOSE: 0x{{.*}}: ..000000 0000ffff 00000000 00000000
+ // CHECK-VERBOSE: 0x{{.*}}: 00000000 00...... ........ ........
+
+ // CHECK: WARNING: MemorySanitizer: use-of-uninitialized-value
+ // CHECK: #0 0x{{.*}}in main{{.*}}msan_check_mem_is_initialized.cc:[[@LINE-7]]
+#endif
+ return 0;
+}
+