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 wrote: >>>> >>>> On Sun, Nov 13, 2022 at 10:36 AM Alejandro Colomar via Gcc >>>> 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. --