http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53210

             Bug #: 53210
           Summary: warning for data member initialized with itself should
                    be in -Wall
    Classification: Unclassified
           Product: gcc
           Version: 4.7.0
            Status: UNCONFIRMED
          Keywords: diagnostic
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: r...@gcc.gnu.org


struct S {
    S(int i) : j(j) { __builtin_printf("init'd to %d\n", i); }
    int j;
};

The code has a typo, the mem-initializer should have been l(i)

G++ knows how to warn about the self-initialization, but only does so when
-Winit-self is used:

s.cc: In constructor 'S::S(int)':
s.cc:2:5: warning: 'S::j' is initialized with itself [-Wuninitialized]

Although the warning is enabled by -Winit-self it is reported as
-Wuninitialized (which kinda makes sense as it requires both to be active)

More importantly, I think this code should always warn. 

-Winit-self is off to avoid warnings for (questionable) code which does
   int i = i;
but there is no good reason to do that in a constructor's mem-initializer-list,
so no reason that -Wall shouldn't warn about it.

If you want 'i' to be uninitialized, simply leave it out of the
mem-initializer-list.  Adding a mem-initializer that does self-init is just
perverse.

Reply via email to