1 // RUN: %clangxx_asan -O0 %s -o %t && %run %t
2 // RUN: %clangxx_asan -O0 %s -DPOSITIVE -o %t && not %run %t 2>&1 | FileCheck %s
3 
4 // Test the readv() interceptor.
5 
6 #include <assert.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <unistd.h>
10 #include <fcntl.h>
11 #include <sys/uio.h>
12 #include <time.h>
13 
main()14 int main() {
15   char buf[2011];
16   struct iovec iov[2];
17 #ifdef POSITIVE
18   char * volatile buf_ = buf;
19   iov[0].iov_base = buf_ - 1;
20 #else
21   iov[0].iov_base = buf + 1;
22 #endif
23   iov[0].iov_len = 5;
24   iov[1].iov_base = buf + 10;
25   iov[1].iov_len = 2000;
26   int fd = open("/etc/hosts", O_RDONLY);
27   assert(fd > 0);
28   readv(fd, iov, 2);
29   // CHECK: WRITE of size 5 at
30   close(fd);
31   return 0;
32 }
33