[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