brintos

brintos / llvm-project-archived public Read only

0
0
Text · 851 B · 7b15e06 Raw
40 lines · c
1// Test that custom memmove implementations instrumented by HWASan do not cause2// false positives.3 4// RUN: %clang_hwasan %s -o %t5// RUN: %run %t6 7#include <assert.h>8#include <sanitizer/hwasan_interface.h>9#include <stdlib.h>10 11void *memmove(void *Dest, const void *Src, size_t N) {12  char *Tmp = (char *)malloc(N);13  char *D = (char *)Dest;14  const char *S = (const char *)Src;15 16  for (size_t I = 0; I < N; ++I)17    Tmp[I] = S[I];18  for (size_t I = 0; I < N; ++I)19    D[I] = Tmp[I];20 21  free(Tmp);22  return Dest;23}24 25int main() {26  __hwasan_enable_allocator_tagging();27 28  const size_t BufSize = 64;29  char *Buf = (char *)malloc(BufSize);30 31  for (size_t I = 0; I < BufSize; ++I)32    Buf[I] = I;33  memmove(Buf + BufSize / 2, Buf, BufSize / 2);34  for (size_t I = 0; I < BufSize; ++I)35    assert(Buf[I] == I % (BufSize / 2));36 37  free(Buf);38  return 0;39}40