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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
As soon as consider more complicated testcases than just pre/post increment,
this is going to be very hard to define and especially implement.

The way the warning works right now is that all rvalue uses of a variable are
marked as "read" and the warning then warns about variables that don't have the
"read" bit set, but have the "used" bit set (i.e. they aren't fully unused).
This is especially because the FEs used to fold expressions aggressively very
early (and still do, especially the C FE), so not all expressions (even use in
sizeof etc. counts) survive long enough where we actually would know what the
lhs is corresponding to rhs.  Also, we do not warn if there are any
side-effects in between the rvalue use of the var and the store to it.  So, if
we do want to warn about m = m + 1; we still shouldn't warn for m = foo (m) +
1; or m = (n = m) + 1; etc.  Handling the pre/post increment by 1 might be
easiest, just remember whether the var is not "read" before processing it and
reset the "read" bit if so afterwards, but as soon as you run into more complex
expressions that is going to be harder and harder.

Reply via email to