Quantcast
Channel: Active questions tagged gcc - Stack Overflow
Viewing all articles
Browse latest Browse all 22304

Why -Wunused-value does not catch a statement `true;`?

$
0
0

Given following C code:

#include <stdbool.h>int main (void){    true;    return 0;}

I expect that -Wunused-value would cause a warning at line 5: true;
because this statement does nothing and can be a source of the bug
but it goes through silent - in fact -Wunused -Wall -Wextra does not catch it.


For comparison, something like this:

#define TRUE 1int main (void){    TRUE;    return 0;}

or this:

int main (void){    1;    return 0;}

would trigger the proper warning as one would expect (GCC 14.2):

<source>: In function 'main':<source>:3:5: warning: statement with no effect [-Wunused-value]    3 |     1;      |     ^

So I started digging; I thought this might be a regression in GCC.
I went from GCC 14.2 down to the very, very old releases
and seems like GCC 3.4.6 was the last one where the warning appears as expected.

I thought about reporting this to GCC but then I checked Clang
and Clang also does not produce any warning about this since Clang 3.0.0

See: https://godbolt.org/z/T361d3ad6


Although I was able to find similar bugs on GCC mailing list, e.g.
https://gcc.gnu.org/pipermail/gcc-bugs/2021-November/765405.html
I cannot believe that two major compiler vendors simply have the same bug for a long time.

I suspect this is happening since true is a macro defined inside of libc headers
and compiler generally do not yell about issues coming from libc
but since this one is happening inside of my code I'm a bit concerned.
I wasted a lot of time on finding this, then realizing the warning should catch it.


Is there any rationale on why this is happening?
Or is this just a bug/regression in the compiler that should be reported?


EDITs / NOTEs:

  • MSVC invoked with /Wall /std:c11 does NOT have this issue
  • Since I already have a lot of information, I reported this to LLVM/clang (seems like the easiest place to report it for now) - https://github.com/llvm/llvm-project/issues/106867
  • If I won't get any response on the bug above, I will send it to GCC
  • I do NOT believe that -Wsystem-header is a valid solution for this problem (see my comments under dbush answer for explanation)

Viewing all articles
Browse latest Browse all 22304

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>