[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