Member initialization list warning flag

Anthony Brandon anthony.brandon@gmail.com
Thu Nov 12 22:12:00 GMT 2015


Hi,

I found the code from when I worked on 19808.
With this input:

struct S
{
        int i, j;
        S() : i(j), j(1) {}
};

struct B
{
        int i, j;
        B() : i(j+i), j(j+1) {}
};

struct C
{
        int i, j;
        C() : i(i) {}
};

I get this output:

test.C:4:10: warning: ‘S::i’ is initialized with uninitialized field
‘S::j’ [-Wuninitialized]
  S() : i(j), j(1) {}
          ^

test.C:10:10: warning: ‘B::i’ is initialized with uninitialized field
‘B::j’ [-Wuninitialized]
  B() : i(j+i), j(j+1) {}
          ^

test.C:16:10: warning: ‘C::i’ is initialized with itself [-Winit-self]
  C() : i(i), j(1) {}
          ^
The main questions I have are what to do in cases like
i(i+j) and the like, or where multiple uninitialized values are used,
or i(i+1) for that matter.


On Tue, Nov 10, 2015 at 12:40 AM, Manuel López-Ibáñez
<manuel.lopez-ibanez@manchester.ac.uk> wrote:
> On 09/11/15 20:41, Zygmunt Ptak wrote:
>>
>> Hi,
>>
>> Is there any param in the gcc which will warn about not initialized
>> class member from the initialization list?
>
>
> Unfortunately, no. We do not even warn for:
>
> struct S
> {
>     int i, j;
>     S() : i(j), j(1) {}
> }
>
> This is https://gcc.gnu.org/PR19808 and it should be not too difficult to
> fix, it just needs someone with enough time and perseverance to fix it.
> Anthony Brandon started working on it, but I'm not sure what is the status
> now. Of course, anyone is more than welcome to pick it up.
>
> There is also https://gcc.gnu.org/PR2972, which is probably closer to what
> you want. The current patch
> (https://gcc.gnu.org/ml/gcc-patches/2011-11/msg01068.html) will warn even if
> the member is initialized within the constructor. But if this is what you
> want, you could try updating the patch to the latest trunk, complete it and
> submit it for approval.
>
> Cheers,
>
> Manuel.



-- 
Anthony



More information about the Gcc-help mailing list