From hans@truk.brandinnovators.com  Thu Mar 13 07:07:29 1997
Received: from news.IAEhv.nl (root@news.IAEhv.nl [194.151.64.4])
          by freefall.freebsd.org (8.8.5/8.8.5) with SMTP id HAA01389
          for <FreeBSD-gnats-submit@freebsd.org>; Thu, 13 Mar 1997 07:07:23 -0800 (PST)
Received: from truk.brandinnovators.com (uucp@localhost) 
          by news.IAEhv.nl (8.6.13/1.63) with IAEhv.nl; pid 15342
          on Thu, 13 Mar 1997 16:07:16 +0100; id QAA15342
          efrom: hans@truk.brandinnovators.com; eto: FreeBSD-gnats-submit@freebsd.org
Received: by truk.brandinnovators.com (8.7.5/BI96070101) 
    for <> id PAA01226; Thu, 13 Mar 1997 15:39:28 +0100 (MET)
Message-Id: <199703131439.PAA01226@truk.brandinnovators.com>
Date: Thu, 13 Mar 1997 15:39:28 +0100 (MET)
From: hans@brandinnovators.com (Hans Zuidam)
Reply-To: hans@brandinnovators.com
To: FreeBSD-gnats-submit@freebsd.org
Subject: Make gcc shut up about extensions when compiling `-pedantic -ansi'
X-Send-Pr-Version: 3.2

>Number:         2979
>Category:       bin
>Synopsis:       GCC complains about stmt. expr. when compiling machine/endian.h with -pedantic -ansi
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Thu Mar 13 07:10:01 PST 1997
>Closed-Date:    Fri Apr 17 12:48:13 PDT 1998
>Last-Modified:  Fri Apr 17 12:53:35 PDT 1998
>Originator:     Hans Zuidam
>Release:        2.1.5-RELEASE
>Organization:
Brand Innovators B.V.  P-Mail: P.O. Box 1377
		 de Pinckart 54         5602 BJ Eindhoven, The Netherlands
		 5674 CC Nuenen         Tel. +31 40 2631134, Fax. +31 40 2831138
>Environment:

	gcc version 2.6.3

>Description:

	When compiling something which uses statement expressions (e.g
	machine/endian.h to get at ntohl()), gcc complains that braces
	are not allowed by ANSI C.

>How-To-Repeat:

	Compile something which uses statement expressions.

>Fix:
	
	Below is a diff. for the relevant files.  Insert `__extension__'
	before the expression.

*** /usr/include/machine/endian.h.orig	Sun Feb 12 09:31:31 1995
--- /usr/include/machine/endian.h	Thu Mar 13 15:20:31 1997
***************
*** 58,90 ****
  #endif
  
  #define __word_swap_long(x) \
! ({ register u_long __X = (x); \
     __asm ("rorl $16, %1" \
  	: "=r" (__X) \
  	: "0" (__X)); \
     __X; })
  #if __GNUC__ >= 2
  #define __byte_swap_long(x) \
! ({ register u_long __X = (x); \
     __asm ("xchgb %h1, %b1\n\trorl $16, %1\n\txchgb %h1, %b1" \
  	: "=q" (__X) \
  	: "0" (__X)); \
     __X; })
  #define __byte_swap_word(x) \
! ({ register u_short __X = (x); \
     __asm ("xchgb %h1, %b1" \
  	: "=q" (__X) \
  	: "0" (__X)); \
     __X; })
  #else /* __GNUC__ >= 2 */
  #define __byte_swap_long(x) \
! ({ register u_long __X = (x); \
     __asm ("rorw $8, %w1\n\trorl $16, %1\n\trorw $8, %w1" \
  	: "=r" (__X) \
  	: "0" (__X)); \
     __X; })
  #define __byte_swap_word(x) \
! ({ register u_short __X = (x); \
     __asm ("rorw $8, %w1" \
  	: "=r" (__X) \
  	: "0" (__X)); \
--- 58,90 ----
  #endif
  
  #define __word_swap_long(x) \
! __extension__ ({ register u_long __X = (x); \
     __asm ("rorl $16, %1" \
  	: "=r" (__X) \
  	: "0" (__X)); \
     __X; })
  #if __GNUC__ >= 2
  #define __byte_swap_long(x) \
! __extension__ ({ register u_long __X = (x); \
     __asm ("xchgb %h1, %b1\n\trorl $16, %1\n\txchgb %h1, %b1" \
  	: "=q" (__X) \
  	: "0" (__X)); \
     __X; })
  #define __byte_swap_word(x) \
! __extension__ ({ register u_short __X = (x); \
     __asm ("xchgb %h1, %b1" \
  	: "=q" (__X) \
  	: "0" (__X)); \
     __X; })
  #else /* __GNUC__ >= 2 */
  #define __byte_swap_long(x) \
! __extension__ ({ register u_long __X = (x); \
     __asm ("rorw $8, %w1\n\trorl $16, %1\n\trorw $8, %w1" \
  	: "=r" (__X) \
  	: "0" (__X)); \
     __X; })
  #define __byte_swap_word(x) \
! __extension__ ({ register u_short __X = (x); \
     __asm ("rorw $8, %w1" \
  	: "=r" (__X) \
  	: "0" (__X)); \
*** /usr/include/machine/cpufunc.h.orig	Sat Jan 13 11:46:38 1996
--- /usr/include/machine/cpufunc.h	Thu Mar 13 15:27:06 1997
***************
*** 111,117 ****
   * because gcc-2.6.0 would promote the operands of the conditional
   * and produce poor code for "if ((inb(var) & const1) == const2)".
   */
! #define	inb(port)	({						\
  	u_char	_data;							\
  	if (__builtin_constant_p((int) (port)) && (port) < 256ul)	\
  		_data = inbc(port);					\
--- 111,117 ----
   * because gcc-2.6.0 would promote the operands of the conditional
   * and produce poor code for "if ((inb(var) & const1) == const2)".
   */
! #define	inb(port)	__extension__ ({				\
  	u_char	_data;							\
  	if (__builtin_constant_p((int) (port)) && (port) < 256ul)	\
  		_data = inbc(port);					\
*** /usr/include/values.h.orig	Thu Mar 13 15:23:41 1997
--- /usr/include/values.h	Thu Mar 13 15:24:01 1997
***************
*** 48,54 ****
  #if defined(sun) || defined(hp300) || defined(hpux) || defined(masscomp) || defined(sgi)
  #ifdef masscomp
  #define MAXDOUBLE							\
! ({									\
    double maxdouble_val;							\
  									\
    __asm ("fmove%.d #0x7fefffffffffffff,%0"	/* Max double */	\
--- 48,54 ----
  #if defined(sun) || defined(hp300) || defined(hpux) || defined(masscomp) || defined(sgi)
  #ifdef masscomp
  #define MAXDOUBLE							\
! __extension__ ({							\
    double maxdouble_val;							\
  									\
    __asm ("fmove%.d #0x7fefffffffffffff,%0"	/* Max double */	\
*** /usr/include/vm/vm_pager.h.orig	Thu Mar 13 15:24:39 1997
--- /usr/include/vm/vm_pager.h	Thu Mar 13 15:24:52 1997
***************
*** 125,138 ****
   * XXX compat with old interface
   */
  #define vm_pager_get(p, m, s) \
! ({ \
  	vm_page_t ml[1]; \
  	ml[0] = (m); \
  	vm_pager_get_pages(p, ml, 1, 0, s); \
  })
  
  #define vm_pager_put(p, m, s) \
! ({ \
  	int rtval; \
  	vm_page_t ml[1]; \
  	ml[0] = (m); \
--- 125,138 ----
   * XXX compat with old interface
   */
  #define vm_pager_get(p, m, s) \
! __extension__ ({ \
  	vm_page_t ml[1]; \
  	ml[0] = (m); \
  	vm_pager_get_pages(p, ml, 1, 0, s); \
  })
  
  #define vm_pager_put(p, m, s) \
! __extension__ ({ \
  	int rtval; \
  	vm_page_t ml[1]; \
  	ml[0] = (m); \

>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: dt 
State-Changed-When: Fri Apr 17 12:48:13 PDT 1998 
State-Changed-Why:  
This is fixed now. 
>Unformatted:
