bug-gnulib
[Top][All Lists]
Advanced

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

Re: improve clang support (25)


From: Bruno Haible
Subject: Re: improve clang support (25)
Date: Sun, 16 Aug 2020 18:45:21 +0200
User-agent: KMail/5.1.3 (Linux/4.4.0-186-generic; KDE/5.18.0; x86_64; ; )

> Where does clang support the 'restrict' and '__restrict' keywords? It's
> like with GCC >= 3.1:
> 
>                    C mode         C++ mode
> 
> T*__restrict       supported      supported
> [__restrict]       supported      error
> T*restrict         supported      error
> [restrict]         supported      error

'__restrict' is also dealt with in a couple of other files. Here are the
corresponding updates.


2020-08-16  Bruno Haible  <bruno@clisp.org>

        Use __restrict also on clang.
        * lib/argp.h (__restrict): Don't define as a macro on clang >= 3.
        * lib/glob.in.h (_Restrict_): Use __restrict on clang >= 3.
        * lib/unitypes.in.h (_UC_RESTRICT): Likewise.

diff --git a/lib/argp.h b/lib/argp.h
index 808c900..c71dd96 100644
--- a/lib/argp.h
+++ b/lib/argp.h
@@ -39,7 +39,8 @@
    Other compilers use __restrict, __restrict__, and _Restrict, and
    'configure' might #define 'restrict' to those words.  */
 #ifndef __restrict
-# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__))
+# if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__) \
+        || __clang_major__ >= 3)
 #  if 199901L <= __STDC_VERSION__
 #   define __restrict restrict
 #  else
diff --git a/lib/glob.in.h b/lib/glob.in.h
index 7061a25..d1c0733 100644
--- a/lib/glob.in.h
+++ b/lib/glob.in.h
@@ -45,7 +45,9 @@
    'configure' might #define 'restrict' to those words, so pick a
    different name.  */
 #ifndef _Restrict_
-# if defined __restrict || 2 < __GNUC__ + (95 <= __GNUC_MINOR__)
+# if defined __restrict \
+     || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \
+     || __clang_major__ >= 3
 #  define _Restrict_ __restrict
 # elif 199901L <= __STDC_VERSION__ || defined restrict
 #  define _Restrict_ restrict
diff --git a/lib/unitypes.in.h b/lib/unitypes.in.h
index b11326d..63d0fe3 100644
--- a/lib/unitypes.in.h
+++ b/lib/unitypes.in.h
@@ -47,7 +47,9 @@ typedef uint32_t ucs4_t;
    pass a pointer to a different object in the specified pointer argument
    than in the other pointer arguments.  */
 #ifndef _UC_RESTRICT
-# if defined __restrict || 2 < __GNUC__ + (95 <= __GNUC_MINOR__)
+# if defined __restrict \
+     || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \
+     || __clang_major__ >= 3
 #  define _UC_RESTRICT __restrict
 # elif 199901L <= __STDC_VERSION__ || defined restrict
 #  define _UC_RESTRICT restrict




reply via email to

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