From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754776AbbDTKm0 (ORCPT ); Mon, 20 Apr 2015 06:42:26 -0400 Received: from smtprelay0011.hostedemail.com ([216.40.44.11]:51961 "EHLO smtprelay.hostedemail.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754120AbbDTKmZ (ORCPT ); Mon, 20 Apr 2015 06:42:25 -0400 X-Session-Marker: 6A6F6540706572636865732E636F6D X-Spam-Summary: 50,0,0,,d41d8cd98f00b204,joe@perches.com,:::::::::::::,RULES_HIT:41:152:355:379:541:967:973:988:989:1260:1277:1311:1313:1314:1345:1359:1373:1437:1515:1516:1518:1534:1542:1593:1594:1711:1730:1747:1777:1792:1981:2194:2199:2393:2525:2553:2560:2563:2682:2685:2859:2915:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3353:3622:3653:3865:3868:3870:3871:3872:3873:3874:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4250:4321:4401:4605:5007:6119:6120:6261:7903:8550:8784:9010:9025:10004:10400:10471:10848:11026:11232:11473:11658:11914:12043:12517:12519:12555:12679:12698:12737:12740:13255:13548:13845:13894:14096:14097:21080,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:none,Custom_rules:0:0:0 X-HE-Tag: park77_4f0496bbdc203 X-Filterd-Recvd-Size: 3992 Message-ID: <1429526541.4216.18.camel@perches.com> Subject: gcc doesn't warn about uninitialized variable use in switch/case with -O (was: Re: [PATCH] Staging: dgnc: Using temporary value for repeated dereferences) From: Joe Perches To: Dan Carpenter Cc: Yorick Rommers , devel@driverdev.osuosl.org, lidza.louina@gmail.com, driverdev-devel@linuxdriverproject.org, linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org Date: Mon, 20 Apr 2015 03:42:21 -0700 In-Reply-To: <20150420083310.GE16501@mwanda> References: <1429475676.2947.43.camel@perches.com> <1429491259.27863.1.camel@perches.com> <20150420083310.GE16501@mwanda> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.12.10-0ubuntu1~14.10.1 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2015-04-20 at 11:33 +0300, Dan Carpenter wrote: > You would hope that GCC would warn about the uninitialized variable but > it doesn't. That's odd. So I filed this new gcc bugzilla: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65812) gcc 4.9.1 doesn't warn about uninitialized variable use declared in a switch/case statement when compiled with -O Here is a small example: $ cat t.c struct foo { int bar[100]; }; void foo_1(void) { unsigned int m; extern struct foo *array[100]; struct foo *a = array[m]; a = a; } void foo_2(void) { int i = 1; switch (i) { case 1: { unsigned int m; extern struct foo *array[100]; struct foo *a = array[m]; a = a; break; } } } $ gcc warns properly about both foo_1 and foo_2 without -O $ gcc -c -Wall t.c t.c: In function ‘foo_1’: t.c:9:14: warning: ‘m’ is used uninitialized in this function [-Wuninitialized] struct foo *a = array[m]; ^ t.c: In function ‘foo_2’: t.c:21:15: warning: ‘m’ may be used uninitialized in this function [-Wmaybe-uninitialized] struct foo *a = array[m]; ^ $ but gcc warns about foo_1 but not foo_2 with -O $ gcc -c -Wall -O t.c t.c: In function ‘foo_1’: t.c:9:14: warning: ‘m’ is used uninitialized in this function [-Wuninitialized] struct foo *a = array[m]; ^ $ gcc -v Using built-in specs. COLLECT_GCC=/usr/bin/gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.9.1-16ubuntu6' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu Thread model: posix gcc version 4.9.1 (Ubuntu 4.9.1-16ubuntu6)