blob: d6f8be70bf91f27c88b52fcf934449630cfe358b [file] [log] [blame]
Pirama Arumuga Nainar7c915052015-04-08 08:58:29 -07001// RUN: %clangxx_msan -O0 %s -o %t && %run %t
Stephen Hines2d1fdb22014-05-28 23:58:16 -07002
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) {
Stephen Hines86277eb2015-03-23 12:06:32 -070012#if defined(__x86_64__)
Stephen Hines2d1fdb22014-05-28 23:58:16 -070013 return (char *)((uintptr_t)p & ~0x400000000000ULL);
Stephen Hines86277eb2015-03-23 12:06:32 -070014#elif defined (__mips64)
15 return (char *)((uintptr_t)p & ~0x4000000000ULL);
16#endif
Stephen Hines2d1fdb22014-05-28 23:58:16 -070017}
18
19int main(void) {
20 const char *s = "abcdef";
21 assert(strlen(s) == 6);
22 assert(strlen(mem_to_shadow(s)) == 0);
23
24 char *t = new char[42];
25 t[41] = 0;
26 assert(strlen(mem_to_shadow(t)) == 41);
27 return 0;
28}