misc/160294: missing cast in "/usr/include/assert.h" v 1.4
2002/03/23 17:24:53
Abe
abe_skolnik at yahoo.com
Mon Aug 29 19:20:10 UTC 2011
>Number: 160294
>Category: misc
>Synopsis: missing cast in "/usr/include/assert.h" v 1.4 2002/03/23 17:24:53
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Aug 29 19:20:09 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator: Abe
>Release: Mac OS X Server 10.6.5 ;-)
>Organization:
TAMU
>Environment:
Darwin [hostname] 10.5.0 Darwin Kernel Version 10.5.0: Fri Nov 5 23:20:39 PDT 2010; root:xnu-1504.9.17~1/RELEASE_I386 i386 i386
>Description:
The "/usr/include/assert.h" from FreeBSD causes C++ compilation to fail when an assertion is done and the compiler is non-GCC _and_ does not define "__GNUC__" _and_ "NDEBUG" is not defined. It`s a simple and quick fix.
>How-To-Repeat:
compile this:
#include <cassert>
int main() {
assert(1);
}
like this [assuming Clang is installed and is on the PATH]:
clang++ -U__GNUC__ test.cpp
and one of the errors you get is this:
test.cpp:3:3: error: right operand to ? is void, but left operand is of type 'int'
assert(1);
^~~~~~~~~
In file included from test.cpp:1:
In file included from /usr/include/c++/4.2.1/cassert:48:
/usr/include/assert.h:69:18: note: instantiated from:
((void) ((e) ? 0 : __assert (#e, __FILE__, __LINE__)))
^ ~
>Fix:
*** /usr/include/assert.h 2009-10-02 01:24:01.000000000 -0500
--- /tmp/assert.h___new 2011-08-28 21:39:12.000000000 -0500
***************
*** 66,72 ****
__END_DECLS
#define assert(e) \
! ((void) ((e) ? 0 : __assert (#e, __FILE__, __LINE__)))
#define __assert(e, file, line) \
((void)printf ("%s:%u: failed assertion `%s'\n", file, line, e), abort())
--- 66,72 ----
__END_DECLS
#define assert(e) \
! ((void) ((e) ? ((void)0) : __assert (#e, __FILE__, __LINE__)))
#define __assert(e, file, line) \
((void)printf ("%s:%u: failed assertion `%s'\n", file, line, e), abort())
q
Patch attached with submission follows:
*** /usr/include/assert.h 2009-10-02 01:24:01.000000000 -0500
--- /tmp/assert.h___new 2011-08-28 21:39:12.000000000 -0500
***************
*** 66,72 ****
__END_DECLS
#define assert(e) \
! ((void) ((e) ? 0 : __assert (#e, __FILE__, __LINE__)))
#define __assert(e, file, line) \
((void)printf ("%s:%u: failed assertion `%s'\n", file, line, e), abort())
--- 66,72 ----
__END_DECLS
#define assert(e) \
! ((void) ((e) ? ((void)0) : __assert (#e, __FILE__, __LINE__)))
#define __assert(e, file, line) \
((void)printf ("%s:%u: failed assertion `%s'\n", file, line, e), abort())
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list