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

Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |diagnostic
            Summary|false negative of           |missing warning by
                   |-Wunused-value              |-Wunused-value in compound
                   |                            |expressions

--- Comment #6 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
(In reply to Mikhail Maltsev from comment #5)
> > gets somehow transformed into
> > b = (a = 0B) != 0B;, 0;
> 
> Probably folding works this way. Anyway, I think, I can explain how the

It would be interesting to know if the above is a faithful representation of
the AST representation or the pretty-printer is printing something weird. As
printed, the code does not look right. If it is a faithful representation, it
would be great to know where this folding occurs (and disable it).

> P.S. I know, that it all might be obvious for most of you, but I'm just
> trying to get acquainted with GCC sources and (hopefully) do something
> useful for the project, while waiting for next stage1 (bugs being fixed
> during stage 4 are obviously not for newcomers).

It wasn't obvious to me at all. I think it is extremely useful to provide a
deep analysis of PRs. A good analysis makes other devs more inclined to take a
bug and fix it. If you were only to do that, it would already be a great
contribution.

The logic in the second branch is wrong. This made me think of another testcase
where it is even more obvious that there is a missing warning:

int *a;
int b;
void g();
void f() {
  b = (g(), (a = 0) != 0, 0);
  b = ((g(), (a = 0) != 0), 0);
  b = (g(), ((a = 0) != 0, 0));
}

We should get a warning in all three lines, but we only get it in the last one.

Reply via email to