[gnu.gcc.bug] Gnu C 1.28's assert.h and DPANS don't mix

ado@NCIFCRF.GOV (Arthur David Olson) (09/21/88)

(We're running SunOS 4.0 on a Sun 3/110.)

Description:
	The "assert" macro defined in "assert.h" fails to evaluate to a
	void expression (see page 74 of the May, 1988 Rationale).

Repeat-By:
	Script started on Tue Sep 20 15:37:46 1988
	elsie$ cat try.c
	#include <stdio.h>
	#include <assert.h>

	int
	main()
	{
		assert(1), assert(1);
		return 0;
	}
	elsie$ gcc -v try.c
	gcc version 1.28
	 /usr/local/lib/gcc-cpp -v -undef -D__GNU__ -D__GNUC__ -Dvax -Dunix try.c /tmp/cc019174.cpp
	GNU CPP version 1.28
	 /usr/local/lib/gcc-cc1 /tmp/cc019174.cpp -quiet -dumpbase try.c -version -o /tmp/cc019174.s
	GNU C version 1.28 (vax) compiled by GNU C version 1.28.

	try.c:7: parse error before `,'
	At top level:
	try.c:7: parse error before `}'
	elsie$ exit

	script done on Tue Sep 20 15:37:59 1988

Fix:
	*** 1.1/assert.h	Tue Sep 20 15:41:20 1988
	--- 1.2/assert.h	Tue Sep 20 15:41:22 1988
	***************
	*** 4,17 ****
	  #define assert(ignore)
	  #else
	  
	! #define assert(expression)  \
	!   do { if (!(expression)) __assert ((expression), __FILE__, __LINE__); } while (0)
	  
	  #define __assert(expression, file, line)  \
	!   { _eprintf ("Failed assertion " #expression		\
	! 	      " at line %d of `" file "'.\n", line);	\
	!     abort (); }
	  
	  void _eprintf ();		/* Defined in gnulib */
	  
	  #endif
	--- 4,18 ----
	  #define assert(ignore)
	  #else
	  
	! #define assert(expr)  \
	! 	( (expr)? (void)0 : __assert((expr), __FILE__, __LINE__) )
	  
	  #define __assert(expression, file, line)  \
	!   ( _eprintf ("Failed assertion " #expression		\
	! 	      " at line %d of `" file "'.\n", line),	\
	!     abort () )
	  
	  void _eprintf ();		/* Defined in gnulib */
	+ void abort ();
	  
	  #endif
-- 
	  The Canadian space program is into artificial catatonia.
	ado@ncifcrf.gov			ADO is a trademark of Ampex.