1// RUN: %clangxx_msan -m64 -O0 %s -o %t && %run %t
2
3// Check that strlen() and similar intercepted functions can be called on shadow
4// memory.
5
6#include <assert.h>
7#include <stdint.h>
8#include <stdio.h>
9#include <string.h>
10
11const char *mem_to_shadow(const char *p) {
12  return (char *)((uintptr_t)p & ~0x400000000000ULL);
13}
14
15int main(void) {
16  const char *s = "abcdef";
17  assert(strlen(s) == 6);
18  assert(strlen(mem_to_shadow(s)) == 0);
19
20  char *t = new char[42];
21  t[41] = 0;
22  assert(strlen(mem_to_shadow(t)) == 41);
23  return 0;
24}
25