Date: Thu, 13 Mar 1997 15:39:28 +0100 (MET) From: hans@brandinnovators.com (Hans Zuidam) To: FreeBSD-gnats-submit@freebsd.org Subject: bin/2979: Make gcc shut up about extensions when compiling `-pedantic -ansi' Message-ID: <199703131439.PAA01226@truk.brandinnovators.com> Resent-Message-ID: <199703131510.HAA01565@freefall.freebsd.org>
index | next in thread | raw e-mail
>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: open
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Thu Mar 13 07:10:01 PST 1997
>Last-Modified:
>Originator: Hans Zuidam
>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
>Release: 2.1.5-RELEASE
>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); \
>Audit-Trail:
>Unformatted:
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199703131439.PAA01226>
