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

David Malcolm <dmalcolm at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2024-12-13
            Summary|bogus "infinite loop"       |bogus "infinite loop"
                   |warning                     |warning due to -fanalyzer
                   |                            |not restricting range of
                   |                            |iterator variable
     Ever confirmed|0                           |1

--- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
Thanks for filing this bug report.

Confirmed; reproducer on GCC trunk with Compiler Explorer:
  https://godbolt.org/z/TGh8sbjYc
which shows the control flow in a slightly different way (hopefully more
readable).

It looks like the analyzer is considering the (impossible) path in which we
exit the inner loop due to
  (j >= nsubst)
but also fail to execute the increment of "i" due to:
  j != nsubst

i.e. that:
  j > nsubst

which of course isn't possible, since j is being incremented up from 0 until it
reaches nsubst, and thus can only be in the range [0, nsubst].

Looks like the analyzer needs to be smarter about iteration variables.

Reply via email to