[comp.lang.c] 'BSD C compiler bug'

tim@mtxinu.UUCP (Tim Wood) (03/19/88)

Subject: BSD C compiler bug?
Newsgroups: comp.unix,comp.lang.c
Keywords: comma notation


There seems to be a bug with comma notation in BSD C.  (It shows up
on the Ultrix, MORE/BSD and Sun compilers, FYI).

This program:
     1		# define NULL	0
     2		main()
     3		{
     4			unsigned char	**foo;
     5			int		fn();
     6	
     7			foo = NULL;
     8			foo = (NULL, NULL);
     9			foo = ( !foo ? NULL : (fn(2), NULL) );
    10		}
    11	
    12		fn(a)
    13		int	a;
    14		{ return (a); }
    15	
gets 'cc' errors:
"comma.c", line 8: warning: illegal combination of pointer and integer, op =
"comma.c", line 9: warning: illegal combination of pointer and integer, op =

Removing the parentheses from line 8 results in:
"comma.c", line 9: warning: illegal combination of pointer and integer, op =

Leaving line 8 alone and replacing line 9 with:
		foo = ( !foo ? NULL : fn(2), NULL );
or
		foo = !foo ? NULL : fn(2), NULL;
gives the same errors (for lines 8 and 9).

K&R say that the result type & value of a comma expression are that of the
second term, which is NULL (0) in all cases here.  And NULL is assignment
compatible to all pointers.
Or am I missing something?

-TW

{ihnp4!pacbell,pyramid,{uunet,ucbvax}!mtxinu}!sybase!tim

-- 
{ihnp4!pacbell,pyramid,{uunet,ucbvax}!mtxinu}!sybase!tim

brian@bucc2.UUCP (03/23/88)

> /* Written  7:55 pm  Mar 18, 1988 by mtxinu.UUCP!tim in bucc2:comp.lang.c */
> /* ---------- "'BSD C compiler bug'" ---------- */
> Subject: BSD C compiler bug?
> Newsgroups: comp.unix,comp.lang.c
> Keywords: comma notation
> 
> 
> There seems to be a bug with comma notation in BSD C.  (It shows up
> on the Ultrix, MORE/BSD and Sun compilers, FYI).
> 
> This program:
>      1		# define NULL	0
>      2		main()
>      3		{
>      4			unsigned char	**foo;
>      5			int		fn();
>      6	
>      7			foo = NULL;
>      8			foo = (NULL, NULL);
>      9			foo = ( !foo ? NULL : (fn(2), NULL) );
>     10		}
>     11	
>     12		fn(a)
>     13		int	a;
>     14		{ return (a); }
>     15	
> gets 'cc' errors:
> "comma.c", line 8: warning: illegal combination of pointer and integer, op =
> "comma.c", line 9: warning: illegal combination of pointer and integer, op =

  I _think_ changing those NULL's on lines 8,9 to (unsigned char **) NULL will
eliminate these warnings.

...............................................................................

  When the going gets weird, the weird turn pro.

  Brian Michael Wendt       UUCP: {cepu,ihnp4,uiucdcs,noao}!bradley!brian
  Bradley University        ARPA: cepu!bradley!brian@seas.ucla.edu
  (309) 691-5175            ICBM: 40 40' N  89 34' W