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