This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
c/6906: warn about asserts with side effects
- From: Matthias Klose <doko at klose dot in-berlin dot de>
- To: gcc-gnats at gcc dot gnu dot org, debian-gcc at lists dot debian dot org
- Date: Sun, 02 Jun 2002 01:27:16 +0200
- Subject: c/6906: warn about asserts with side effects
- Reply-to: 123468 at bugs dot debian dot org
>Number: 6906
>Category: c
>Synopsis: warn about asserts with side effects
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: unassigned
>State: open
>Class: change-request
>Submitter-Id: net
>Arrival-Date: Sat Jun 01 16:36:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator: Anthony DeRobertis <asd@suespammers.org>
>Release: 3.1 (Debian) (Debian unstable)
>Organization:
The Debian Project
>Environment:
System: Debian GNU/Linux (unstable)
Architecture: i686
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name Version Description
+++-==============-==============-============================================
ii gcc-3.1 3.1-2 The GNU C compiler.
ii binutils 2.12.90.0.7-1 The GNU assembler, linker and binary utiliti
ii libc6 2.2.5-6 GNU C Library: Shared libraries and Timezone
host: i386-linux
configured with: /mnt/data/gcc-3.1/gcc-3.1-3.1ds2/src/configure -v --enable-languages=c,c++,java,f77,proto,objc,ada --prefix=/usr --mandir=$\(prefix\)/share/man --infodir=$\(prefix\)/share/info --with-gxx-include-dir=$\(prefix\)/include/g++-v3-3.1 --enable-shared --with-system-zlib --enable-long-long --enable-nls --without-included-gettext --enable-clocale=gnu --enable-threads=posix --enable-java-gc=boehm --enable-objc-gc i386-linux
>Description:
[ Reported to the Debian BTS as report #123468.
Please CC 123468@bugs.debian.org on replies.
Log of report can be found at http://bugs.debian.org/123468 ]
Anthony DeRobertis:
I realize this is probably implemented easily, but a warning about
asserts with obvious side effects would be nice. For example:
assert(ptr = malloc(...)) /* programmer didn't understand/think about assert */
assert(*ptr++) /* ditto */
assert(f()) /* very suspicious */
assert(i = 1) /* programmer made typo */
Some of these may be caught by other warnings (e.g., assignment in
conditional), at least on #undef NDEBUG builds.
The problem with these is, of course, that everything works fine for the
debugging builds.[0] Then you do a release candidate build, and suddenly
everything breaks.
I wouldn't worry about:
#ifndef NDEBUG
...
ptr++
...
#endif
btw, because that looks a lot more guilty to even a novice than
assert(), which looks like a function call.
[0] I'm not sure if assert is allowed to double-use its macro arguments
or not. So its possible that the standard would allow some of the
above to break, even on debugging builds.
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
>Unformatted: