From: Joe Perches <joe@perches.com>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Yorick Rommers <yorick-rommers@hotmail.com>,
devel@driverdev.osuosl.org, lidza.louina@gmail.com,
driverdev-devel@linuxdriverproject.org,
linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org
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)
Date: Mon, 20 Apr 2015 03:42:21 -0700 [thread overview]
Message-ID: <1429526541.4216.18.camel@perches.com> (raw)
In-Reply-To: <20150420083310.GE16501@mwanda>
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)
next prev parent reply other threads:[~2015-04-20 10:42 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-19 19:18 [PATCH] Staging: dgnc: fixed code style issue Yorick Rommers
2015-04-19 20:34 ` Joe Perches
2015-04-19 21:58 ` [PATCH] Staging: dgnc: Using temporary value for repeated dereferences Yorick Rommers
2015-04-20 0:54 ` Joe Perches
2015-04-20 7:33 ` [PATCH] Staging: dgnc: Using a " Yorick Rommers
2015-05-03 18:50 ` Greg KH
2015-04-20 8:33 ` [PATCH] Staging: dgnc: Using " Dan Carpenter
2015-04-20 10:42 ` Joe Perches [this message]
2015-04-20 12:28 ` gcc doesn't warn about uninitialized variable use in switch/case with -O (was: Re: [PATCH] Staging: dgnc: Using temporary value for repeated dereferences) Joe Perches
2015-04-20 8:27 ` [PATCH] Staging: dgnc: Using temporary value for repeated dereferences Dan Carpenter
2015-04-20 8:13 ` [PATCH] Staging: dgnc: fixed code style issue Dan Carpenter
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=1429526541.4216.18.camel@perches.com \
--to=joe@perches.com \
--cc=dan.carpenter@oracle.com \
--cc=devel@driverdev.osuosl.org \
--cc=driverdev-devel@linuxdriverproject.org \
--cc=gregkh@linuxfoundation.org \
--cc=lidza.louina@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=yorick-rommers@hotmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.