1*d21b3d34SFangrui Song // RUN: %clangxx_msan -O0 -g %s -lutil -o %t && %run %t
2*d21b3d34SFangrui Song 
3*d21b3d34SFangrui Song #include <assert.h>
4*d21b3d34SFangrui Song #include <pty.h>
5*d21b3d34SFangrui Song #include <unistd.h>
6*d21b3d34SFangrui Song #include <cstring>
7*d21b3d34SFangrui Song 
8*d21b3d34SFangrui Song #include <sanitizer/msan_interface.h>
9*d21b3d34SFangrui Song 
10*d21b3d34SFangrui Song int
main(int argc,char ** argv)11*d21b3d34SFangrui Song main (int argc, char** argv)
12*d21b3d34SFangrui Song {
13*d21b3d34SFangrui Song   int parent, worker;
14*d21b3d34SFangrui Song   openpty(&parent, &worker, NULL, NULL, NULL);
15*d21b3d34SFangrui Song   assert(__msan_test_shadow(&parent, sizeof(parent)) == -1);
16*d21b3d34SFangrui Song   assert(__msan_test_shadow(&worker, sizeof(worker)) == -1);
17*d21b3d34SFangrui Song 
18*d21b3d34SFangrui Song   char name[255];
19*d21b3d34SFangrui Song   ttyname_r(parent, name, sizeof(name));
20*d21b3d34SFangrui Song   assert(__msan_test_shadow(name, strlen(name) + 1) == -1);
21*d21b3d34SFangrui Song 
22*d21b3d34SFangrui Song   char *name_p = ttyname(parent);
23*d21b3d34SFangrui Song   assert(__msan_test_shadow(name_p, strlen(name_p) + 1) == -1);
24*d21b3d34SFangrui Song 
25*d21b3d34SFangrui Song   int parent2;
26*d21b3d34SFangrui Song   forkpty(&parent2, NULL, NULL, NULL);
27*d21b3d34SFangrui Song   assert(__msan_test_shadow(&parent2, sizeof(parent2)) == -1);
28*d21b3d34SFangrui Song }
29