public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "ejb at ql dot org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/18016] New: -Winit-self misses member variables initialized after : in ctor
Date: Fri, 15 Oct 2004 16:45:00 -0000	[thread overview]
Message-ID: <20041015164454.18016.ejb@ql.org> (raw)

First, my gcc version information:

% gcc -v
Reading specs from /usr/lib/gcc/i486-linux/3.4.2/specs
Configured with: ../src/configure -v
--enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr
--libexecdir=/usr/lib --with-gxx-include-dir=/usr/include/c++/3.4
--enable-shared --with-system-zlib --enable-nls --without-included-gettext
--program-suffix=-3.4 --enable-__cxa_atexit --enable-libstdcxx-allocator=mt
--enable-clocale=gnu --enable-libstdcxx-debug --enable-java-gc=boehm
--enable-java-awt=gtk --disable-werror i486-linux
Thread model: posix
gcc version 3.4.2 (Debian 3.4.2-2)

This is the gcc-3.4 package in debian, FYI, but this bug is not likely to be
debian-specific.

I'm excited to see the -Winit-self warning, but it fails to catch a common
problem, as illustrated by this code fragment (which I will include inline and
also as an attachment for convenience).  This code has two cases of variables
initialized with themselves: one trivial int b = b case, and one more subtle A()
: a(a) case.  g++ warns for one but not the other.  Use this command:

g++-3.4 -c -Winit-self -Wuninitialized -O1 a.cc

on this file:
class A
{
  public:
    A() : a(a)  // <-- should generate a warning
    {
    }
    int getA()
    {
	int b = b;  // <-- generates warning as it should
	return this->a + b;
    }

  private:
    int a;
};

int main()
{
    A a;
    return a.getA();
}


generates this output:

a.cc: In function `int main()':
a.cc:9: warning: 'b' might be used uninitialized in this function

It fails to warn for A::a being initialized with itself in the constructor.

One might also consider it to be a problem that A::getA's being inlined causes
the warning message to mention main() rather than getA() -- this problem is not
present if getA is not inlined.  Anyway, the line number is okay, so this seems
pretty unimportant though still worthy of mention.

It would also be nice if -Winit-self would automatically add -Wuninitialized
instead of just not doing anything unless -Wuninitialized was also specified. 
I'll mention that in a separate bug report.

-- 
           Summary: -Winit-self misses member variables initialized after :
                    in ctor
           Product: gcc
           Version: 3.4.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: ejb at ql dot org
                CC: ejb at ql dot org,gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i486-linux
  GCC host triplet: i486-linux
GCC target triplet: i486-linux


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


             reply	other threads:[~2004-10-15 16:45 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-15 16:45 ejb at ql dot org [this message]
2004-10-15 16:46 ` [Bug c++/18016] " ejb at ql dot org
2004-10-15 17:05 ` [Bug c++/18016] Warn about member variables initialized with itself pinskia at gcc dot gnu dot org
2004-10-28  3:35 ` giovannibajo at libero dot it
2004-10-28 13:08 ` bangerth at dealii dot org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20041015164454.18016.ejb@ql.org \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).