From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2820 invoked by alias); 15 Oct 2004 16:45:07 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 2799 invoked by uid 48); 15 Oct 2004 16:45:05 -0000 Date: Fri, 15 Oct 2004 16:45:00 -0000 From: "ejb at ql dot org" To: gcc-bugs@gcc.gnu.org Message-ID: <20041015164454.18016.ejb@ql.org> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug c++/18016] New: -Winit-self misses member variables initialized after : in ctor X-Bugzilla-Reason: CC X-SW-Source: 2004-10/txt/msg02119.txt.bz2 List-Id: 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