1// RUN: %clangxx_msan -DGETC -m64 -O0 -g -xc++ %s -o %t && %run %t
2// RUN: %clangxx_msan -DGETC -m64 -O3 -g -xc++ %s -o %t && %run %t
3// RUN: %clang_msan -DGETC -m64 -O0 -g %s -o %t && %run %t
4// RUN: %clang_msan -DGETC -m64 -O3 -g %s -o %t && %run %t
5
6// RUN: %clangxx_msan -DGETCHAR -m64 -O0 -g -xc++ %s -o %t && %run %t
7// RUN: %clangxx_msan -DGETCHAR -m64 -O3 -g -xc++ %s -o %t && %run %t
8// RUN: %clang_msan -DGETCHAR -m64 -O0 -g %s -o %t && %run %t
9// RUN: %clang_msan -DGETCHAR -m64 -O3 -g %s -o %t && %run %t
10
11#include <assert.h>
12#include <stdio.h>
13#include <unistd.h>
14
15int main() {
16  FILE *stream = fopen("/dev/zero", "r");
17  flockfile (stream);
18  int c;
19#if defined(GETCHAR)
20  int res = dup2(fileno(stream), 0);
21  assert(res == 0);
22  c = getchar_unlocked();
23#elif defined(GETC)
24  c = getc_unlocked (stream);
25#endif
26  funlockfile (stream);
27  if (c == EOF)
28    return 1;
29  printf("%c\n", (char)c);
30  fclose(stream);
31  return 0;
32}
33