[PATCH] D106262: [clang][analyzer] Use generic note tag in alpha.unix.Stream .
Balázs Kéri via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 1 07:07:22 PDT 2021
balazske added a comment.
The following test is not good in place of the 3rd? It is nearly the same, only the condition `(!ferror(F) && !feof(F))` is used instead of call to `clearerr`.
void check_indeterminate_notes_fseek_no_feof_no_ferror() {
FILE *F;
char Buf[10];
F = fopen("foo1.c", "r");
if (!F) // expected-note {{Taking false branch}} expected-note {{'F' is non-null}}
return;
fseek(F, 1, SEEK_SET); // expected-note {{Assuming this stream operation fails}}
if (!ferror(F) && !feof(F)) // expected-note {{Taking true branch}} // expected-note {{Left side of '&&' is true}}
fread(Buf, 1, 1, F); // expected-warning {{File position of the stream might be 'indeterminate' after a failed operation. Can cause undefined behavior}}
// expected-note at -1 {{File position of the stream might be 'indeterminate' after a failed operation. Can cause undefined behavior}}
fclose(F);
}
The condition can be changed to `feof(F)` or `ferror(F)` to change the bug type and the note message at `fseek`.
The following test is good too to test if the message depends on the bug type (note check comments are not included):
void check_notes_fseek() {
FILE *F;
char Buf[10];
F = fopen("foo1.c", "r");
if (!F) // expected-note {{Taking false branch}} expected-note {{'F' is non-null}}
return;
fseek(F, 1, SEEK_SET);
fread(Buf, 1, 1, F); // expected-warning {{File position of the stream might be 'indeterminate' after a failed operation. Can cause undefined behavior [alpha.unix.Stream]}}
// expected-warning at -1 {{Read function called when stream is in EOF state. Function has no effect [alpha.unix.Stream]}}
fclose(F);
}
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D106262/new/
https://reviews.llvm.org/D106262
More information about the cfe-commits
mailing list