-Wmaybe-uninitialized
Martin Sebor
msebor@gmail.com
Fri Nov 2 20:14:00 GMT 2018
On 11/02/2018 09:23 AM, Manfred wrote:
> The following was posted on comp.lanc.c++ by Ralf Goertz:
> https://groups.google.com/d/msg/comp.lang.c++/Tb5Ir3A71nw/szKUC5j8AQAJ
>
> #include <iostream>
>
> int main(int argc, char *argv[])
> {
> int x;
> if(argc > 1) x = 1;
>
> std::cout << x << std::endl;
> }
>
> Despite the description of -Wmaybe-uninitialized, even with optimizing
> compilation, neither gcc 8.2.1 nor gcc 7.3.1 report the expected warning
> (with "c++ -Wall -O{1,3}").
>
> Are we missing something?
> Thanks in advance.
>
> PS.
> BTW the trivial C translation behaves the same with "cc -Wall -O{1,3}":
>
> #include <stdio.h>
>
> int main(int argc, char *argv[])
> {
> int x;
> if(argc > 1) x = 1;
>
> printf("%d\n", x);
> }
The code is optimized early on the assumption that x cannot be
used uninitialized (the test is folded to true). The uninitialized
warning runs much later and doesn't see the eliminated uninitialized
path. It's tempting to say it's a bug that GCC folds the code without
warning about the uninitialized path. The CPP pass obviously sees
that the value is uninitialized in the else branch and makes
a decision to optimize based on it, so it seems that it should
be able to issue a warning for it. The question is how noisy
implementing it there (as well) would be.
Martin
More information about the Gcc-help
mailing list