balazske marked 2 inline comments as done. balazske added a comment. The intent is to model the fread-fwrite function failure by returning the error value and set the stream into error state. The error state is a composite of **ferror** and **feof**. The questions are now, at what case do these functions fail and with what error type?
================ Comment at: clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp:107 + /// This value applies to all execution paths in ErrorState except the FEOF + /// case. In more detail, an EOF+indeterminate state is the same as EOF state. + bool FilePositionIndeterminate = false; ---------------- Szelethus wrote: > The standard suggests that this happens on FERROR, not FEOF. > > > If an error occurs, the resulting value of the file position indicator for > > the stream is indeterminate. If a partial element is read, its value is > > indeterminate. > > It would be wild if the stream wouldn't set the FEOF flag after reaching the > end of the file. Also, I would imagine FEOF being usually implemented with > the file position indicator. > > ```lang=bash > $ cat test.cpp` > ``` > ```lang=cpp > #include "stdio.h" > > int main() { > FILE *F = fopen("test.cpp", "r"); > char Buf[1024]; > const int READ_COUNT = 99999; > if (READ_COUNT != fread(Buf, sizeof(char), READ_COUNT, F)) { > printf("%i\n", feof(F)); > } > } > ``` > ```lang=bash > $ build/bin/clang++ test.cpp && ./a.out > 1 > > ``` > > Operations on an EOF and indeterminate stream are very different. I wanted to say in that comment that `FilePositionIndeterminate` should be ignored if the `ErrorState` is `ErrorFEof`. In other words the file is never indeterminate if in EOF state. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D78374/new/ https://reviews.llvm.org/D78374 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits