This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Fix non-__GNUC__ definitions of __inline and __restrict (bug 17721)
- From: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- To: libc-alpha at sourceware dot org
- Date: Tue, 6 Feb 2018 17:37:34 -0200
- Subject: Re: Fix non-__GNUC__ definitions of __inline and __restrict (bug 17721)
- Authentication-results: sourceware.org; auth=none
- References: <alpine.DEB.2.20.1802012035030.13065@digraph.polyomino.org.uk>
On 01/02/2018 18:35, Joseph Myers wrote:
> Bug 17721 reports that the non-__GNUC__ definitions of __inline and
> __restrict are suboptimal, in that they are defined to empty when they
> could be defined to inline and restrict for appropriate language
> versions. This patch makes those fixes.
>
> Tested for x86_64 (however, I have not done any testing with an actual
> non-__GNUC__ compiler and it's likely such compilers may have other
> problems with glibc headers).
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>
> 2018-02-01 Joseph Myers <joseph@codesourcery.com>
>
> [BZ #17721]
> * misc/sys/cdefs.h [!__GNUC__ && (__cplusplus || (__STDC_VERSION__
> && __STDC_VERSION__ >= 199901L))] (__inline): Define to inline.
> [!__GNUC_PREREQ (2,92) && __STDC_VERSION__ && __STDC_VERSION__ >=
> 199901L] (__restrict): Define to restrict.
>
> diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h
> index af103fd..e80a45c 100644
> --- a/misc/sys/cdefs.h
> +++ b/misc/sys/cdefs.h
> @@ -72,7 +72,12 @@
>
> #else /* Not GCC. */
>
> -# define __inline /* No inline functions. */
> +# if (defined __cplusplus \
> + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L))
> +# define __inline inline
> +# else
> +# define __inline /* No inline functions. */
> +# endif
>
> # define __THROW
> # define __THROWNL
> @@ -368,7 +373,11 @@
>
> /* __restrict is known in EGCS 1.2 and above. */
> #if !__GNUC_PREREQ (2,92)
> -# define __restrict /* Ignore */
> +# if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
> +# define __restrict restrict
> +# else
> +# define __restrict /* Ignore */
> +# endif
> #endif
Can't we dump the __GNUC_PREREQ and just check for __STDC_VERSION__? Or old
GCC version does not correct correctly?
>
> /* ISO C99 also allows to declare arrays as non-overlapping. The syntax is
>