Hi David,

On 11/14/22 10:41, David Brown wrote:
On 13/11/2022 19:43, Alejandro Colomar via Gcc wrote:
Hi Andrew!

On 11/13/22 19:41, Andrew Pinski wrote:
On Sun, Nov 13, 2022 at 10:40 AM Andrew Pinski <pins...@gmail.com> wrote:

On Sun, Nov 13, 2022 at 10:36 AM Alejandro Colomar via Gcc
<gcc@gcc.gnu.org> wrote:

Hi,

While discussing some idea for a new feature, I tested the following example
program:


      int main(void)
      {
          int i = i;
          return i;
      }

This is NOT a bug but a documented way of having the warning not being there.
See https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Warning-Options.html#index-Winit-self
https://gcc.gnu.org/onlinedocs/gcc-12.2.0/gcc/Warning-Options.html#index-Wuninitialized
"If you want to warn about code that uses the uninitialized value of
the variable in its own initializer, use the -Winit-self option."

I should note the main reason why I Know about this is because I fixed
this feature years ago (at least for C front-end)
and added the option to disable the feature.

I'm curious: what are the reasons why one would want to disable such a warning?
Why is it not in -Wall or -Wextra?

Thanks,

Alex


Warnings are not perfect - there is always the risk of false positives and false negatives.  And different people will have different ideas about what code is perfectly reasonable, and what code is risky and should trigger a warning.  Thus gcc has warning flag groups (-Wall, -Wextra) that try to match common consensus, and individual flags for personal fine-tuning.

Sometimes it is useful to have a simple way to override a warning in code, without going through "#pragma GCC diagnostic" lines (which are powerful, but not pretty).

So if you have :

     int i;
     if (a == 1) i = 1;
     if (b == 1) i = 2;
     if (c == 1) i = 3;
     return i;

the compiler will warn that "i" may not be initialised.  But if you /know/ that one of the three conditions will match (or you don't care what "i" is if it does not match), then you know your code is fine and don't want the warning.  Writing "int i = i;" is a way of telling the compiler "I know what I am doing, even though this code looks dodgy, because I know more than you do".

Ahh, that makes sense. Since the default warnings warn about 'int i=i+1;' it makes sense to me. Writing 'int i=i;' is just too stupid that can be considered a reasonable way to tell the compiler we know better.

Thanks!

Cheers,

Alex


It's just like writing "while ((*p++ = *q++));", or using a cast to void to turn off an "unused parameter" warning.

--
<http://www.alejandro-colomar.es/>

Attachment: OpenPGP_signature
Description: OpenPGP digital signature

Reply via email to