12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_msan -DGETC -m64 -O0 -g -xc++ %s -o %t && %run %t
22d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_msan -DGETC -m64 -O3 -g -xc++ %s -o %t && %run %t
32d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clang_msan -DGETC -m64 -O0 -g %s -o %t && %run %t
42d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clang_msan -DGETC -m64 -O3 -g %s -o %t && %run %t
52d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
62d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_msan -DGETCHAR -m64 -O0 -g -xc++ %s -o %t && %run %t
72d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clangxx_msan -DGETCHAR -m64 -O3 -g -xc++ %s -o %t && %run %t
82d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clang_msan -DGETCHAR -m64 -O0 -g %s -o %t && %run %t
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines// RUN: %clang_msan -DGETCHAR -m64 -O3 -g %s -o %t && %run %t
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <assert.h>
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <stdio.h>
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#include <unistd.h>
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesint main() {
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  FILE *stream = fopen("/dev/zero", "r");
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  flockfile (stream);
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  int c;
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#if defined(GETCHAR)
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  int res = dup2(fileno(stream), 0);
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  assert(res == 0);
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  c = getchar_unlocked();
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#elif defined(GETC)
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  c = getc_unlocked (stream);
252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines#endif
262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  funlockfile (stream);
272d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  if (c == EOF)
282d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    return 1;
292d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  printf("%c\n", (char)c);
302d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  fclose(stream);
312d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  return 0;
322d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines}
33