Index: compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/feof_fileno_ferror.cc =================================================================== --- compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/feof_fileno_ferror.cc +++ compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/feof_fileno_ferror.cc @@ -0,0 +1,41 @@ +// RUN: %clangxx -g %s -o %t && %run %t + +#include +#include +#include + +int main(int argc, char **argv) { + FILE *fp = fopen(argv[0], "r"); + assert(fp); + + // file should be good upon opening + assert(!feof(fp) && !ferror(fp)); + + // read until EOF + char buf[BUFSIZ]; + while (fread(buf, 1, sizeof buf, fp) != 0) {} + assert(feof(fp)); + + // clear EOF + clearerr(fp); + assert(!feof(fp) && !ferror(fp)); + + // get file descriptor + int fd = fileno(fp); + assert(fd != -1); + + // break the file by closing underlying descriptor + assert(close(fd) != -1); + + // verify that an error is signalled + assert(fread(buf, 1, sizeof buf, fp) == 0); + assert(ferror(fp)); + + // clear error + clearerr(fp); + assert(!feof(fp) && !ferror(fp)); + + // fclose() will return EBADF because of closed fd + assert(fclose(fp) == -1); + return 0; +} Index: compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/fgetc_ungetc_getc.cc =================================================================== --- compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/fgetc_ungetc_getc.cc +++ compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/fgetc_ungetc_getc.cc @@ -0,0 +1,19 @@ +// RUN: %clangxx -g %s -o %t && %run %t + +#include +#include + +int main(int argc, char **argv) { + FILE *fp = fopen(argv[0], "r"); + assert(fp); + + // the file should be at least one character long, always + assert(fgetc(fp) != EOF); + // POSIX guarantees being able to ungetc() at least one character + assert(ungetc('X', fp) != EOF); + // check whether ungetc() worked + assert(getc(fp) == 'X'); + + assert(!fclose(fp)); + return 0; +}