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

             Bug #: 53287
           Summary: "self-initialization" warning doesn't seem to work for
                    non-primitive types...
    Classification: Unclassified
           Product: gcc
           Version: 4.8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: mi...@gnu.org


Gcc has a warning "-Winit-self" which is supposed to warn about cases like "int
x = x;"

It seems to work properly for primitive types, but emits no warnings for
classes.

E.g., the following:

    struct S { S (); S (const S &); int i; };

    extern void g (const S &);

    void f ()
    {
      S x = x;
      g (x);
    }

compiles without warnings:

    $ g++-snapshot -c x.cc -O2 -Wall -Wextra -Winit-self
    $ g++-snapshot --version
    g++ (Debian 20120501-1) 4.8.0 20120501 (experimental) [trunk revision
187013]

Replacing the definition of "S" with "typedef int S;", results in the expected
warning: "warning: 'x' is used uninitialized in this function
[-Wuninitialized]", although the warning-flag referenced in the message
("-Wuninitialized") seems a bit odd, as it's clearly -Winit-self that controls
this -- removing -Winit-self from the command-line (but keeping -Wall and
-Wextra) eliminates the warning...

Thanks,

-miles

Reply via email to