bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [bug-gnulib] fix incompatibilities of regex with gcc -ansi -pedantic


From: Bruno Haible
Subject: Re: [bug-gnulib] fix incompatibilities of regex with gcc -ansi -pedantic
Date: Mon, 27 Nov 2006 14:43:50 +0100
User-agent: KMail/1.9.1

Hi Paul,

> --- lib/regex.h       10 Aug 2006 20:08:01 -0000      1.38
> +++ lib/regex.h       27 Nov 2006 07:15:02 -0000
> @@ -635,14 +635,17 @@
>  #  endif
>  # endif
>  #endif
> -/* gcc 3.1 and up support the [restrict] syntax.  */
> -#ifndef __restrict_arr
> -# if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) \
> -     && !defined __GNUG__
> -#  define __restrict_arr __restrict
> -# else
> -#  define __restrict_arr
> -# endif
> +/* gcc 3.1 and up support the [restrict] syntax.  Don't trust
> +   sys/cdefs.h's definition of __restrict_arr, though, as it
> +   mishandles gcc -ansi -pedantic.  */
> +#undef __restrict_arr
> +#if (defined __GNUG__                                \
> +     || (__STDC_VERSION__ < 199901L          \
> +      && (__STRICT_ANSI__                    \
> +          || (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1)))))
> +# define __restrict_arr
> +#else
> +# define __restrict_arr __restrict
>  #endif

I would find the inverted condition easier to understand. If in our mind
we have the question "when is it safe to use __restrict?", we'll get safer
code than if we ask "which are the conditions which force us to not use
__restrict?".

Also, I consider the __GNUG__ and __STRICT_ANSI__ case some exceptions to
the general rules, and therefore they should be mentioned after the general
rule, not before.

How about this?

*** lib/regex.h 27 Nov 2006 07:15:26 -0000      1.39
--- lib/regex.h 27 Nov 2006 13:44:35 -0000
***************
*** 639,651 ****
     sys/cdefs.h's definition of __restrict_arr, though, as it
     mishandles gcc -ansi -pedantic.  */
  #undef __restrict_arr
! #if (defined __GNUG__                         \
!      || (__STDC_VERSION__ < 199901L           \
!        && (__STRICT_ANSI__                    \
!            || (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1)))))
! # define __restrict_arr
! #else
  # define __restrict_arr __restrict
  #endif
  
  /* POSIX compatibility.  */
--- 639,651 ----
     sys/cdefs.h's definition of __restrict_arr, though, as it
     mishandles gcc -ansi -pedantic.  */
  #undef __restrict_arr
! #if (__STDC_VERSION__ >= 199901L                                      \
!      || (((__GNUC__ == 3 && __GNUC_MINOR__ >= 1) || __GNUC__ > 3)     \
!          && !__STRICT_ANSI__))                                                
\
!     && !defined __GNUG__
  # define __restrict_arr __restrict
+ #else
+ # define __restrict_arr
  #endif
  
  /* POSIX compatibility.  */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]