This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/27791] New: assert() without -ansi doesnt print the failing condition
- From: "joerg dot richter at pdv-fs dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 29 May 2006 08:17:19 -0000
- Subject: [Bug c++/27791] New: assert() without -ansi doesnt print the failing condition
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
$ cat t.cc
#include <cassert>
int main()
{
assert( false );
}
$ g++ -v
Using built-in specs.
Target: powerpc-ibm-aix5.2.0.0
Configured with: /tools/inst/jrichter/gcc-4.1.1/configure
--prefix=/tools/pkg/gcc/4.1.1 --enable-languages=c,c++ --disable-threads
--with-ld=/bin/ld --with-as=/bin/as
Thread model: aix
gcc version 4.1.1
$ g++ -o t t.cc
$ t
Assertion failed: __EX, file t.cc, line 4
Resources lost(coredump)
$ g++ -ansi -o t t.cc
Assertion failed: false, file t.cc, line 4
Resources lost(coredump)
Normally assert outputs the conditions that failed in the error message. But
not without -ansi.
Here follows the relevant part of
lib/gcc/powerpc-ibm-aix5.2.0.0/4.1.1/include/assert.h
--------------------------------
#include <standards.h>
#if !defined(__NO_ASSERT_C99) && !defined(_NOISOC99_SOURCE)
#if __STDC_VERSION__ < 199901L && !defined(__C99__FUNC__)
#undef __ASSERT_C99
#else
#if !defined(_ALL_SOURCE) && (!defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE >=
200112L)
#define __ASSERT_C99
#endif
#endif
#endif
#ifdef __ASSERT_C99
#if defined(__STRICT_ANSI__)
#define assert(__EX) ((__EX) ? ((void)0) : __assert_c99(# __EX, __FILE__,
__LINE__, __func__))
#else
#define assert(__EX) ((__EX) ? ((void)0) : __assert_c99("__EX", __FILE__,
__LINE__, __func__))
#endif /* __STDC__*/
#else /* else if __ASSERT_C99 not defined */
#if defined(__STRICT_ANSI__)
#define assert(__EX) ((__EX) ? ((void)0) : __assert(# __EX, __FILE__,
__LINE__))
#else
#define assert(__EX) ((__EX) ? ((void)0) : __assert("__EX", __FILE__,
__LINE__))
#endif /* __STDC__*/
#endif /* __ASSERT_C99 */
#endif /* NDEBUG */
--------------------------------
You can see, depending on __STRICT_ANSI__ __EX is stringified or output as
string. I think the macro expansion of __EX in string literals is pre-standard
and should not be used in a gcc header.
--
Summary: assert() without -ansi doesnt print the failing
condition
Product: gcc
Version: 4.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: joerg dot richter at pdv-fs dot de
GCC host triplet: powerpc-ibm-aix5.2.0.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27791