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