diff options
Diffstat (limited to 'test/msan/strlen_of_shadow.cc')
-rw-r--r-- | test/msan/strlen_of_shadow.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/test/msan/strlen_of_shadow.cc b/test/msan/strlen_of_shadow.cc new file mode 100644 index 0000000000000..bb9fe17d41cdb --- /dev/null +++ b/test/msan/strlen_of_shadow.cc @@ -0,0 +1,24 @@ +// RUN: %clangxx_msan -m64 -O0 %s -o %t && %run %t + +// Check that strlen() and similar intercepted functions can be called on shadow +// memory. + +#include <assert.h> +#include <stdint.h> +#include <stdio.h> +#include <string.h> + +const char *mem_to_shadow(const char *p) { + return (char *)((uintptr_t)p & ~0x400000000000ULL); +} + +int main(void) { + const char *s = "abcdef"; + assert(strlen(s) == 6); + assert(strlen(mem_to_shadow(s)) == 0); + + char *t = new char[42]; + t[41] = 0; + assert(strlen(mem_to_shadow(t)) == 41); + return 0; +} |