https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113314

--- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Indeed, if this is a single-threaded program, then this code:

    63  void
    64  fd_add_to_fd_list(volatile struct fdlist* list, int fd)
    65  {
    66    int next;
    67    int new;
    68    int old;
    69    int last;
    70  redo_next:
    71    next = fdtab[fd].update.next;
    72    if (next > -2)
    73      goto done;
    74    if (next == -2)
    75      goto redo_next;

does look like an infinite loop when next == 2.

Perhaps the presence of the atomic builtin later in the function should be a
clue to the analyzer that this is multi-threaded, and that
fdtab[fd].update.next can be changed (presuambly by another thread)

Reply via email to