warn about asserts with side effects
>Submitter-Id: net
>Originator: Anthony DeRobertis <asd@suespammers.org>
>Organization: The Debian Project
>Confidential: no
>Synopsis:
>Severity: non-critical
>Priority: low
>Category: c
>Class: change-request
>Release: 3.1 (Debian) (Debian unstable)
>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:
--
To UNSUBSCRIBE, email to debian-gcc-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Reply to: