Discussion:
[PATCH] Port to PGI 16.10 x86-64
(too old to reply)
Paul Eggert
2017-01-31 02:21:49 UTC
Permalink
Raw Message
This patch fixes one real bug in gl_anylinked_list2.h, along with
some minor glitches that are not bugs. It does not silence PGI’s
thousands of bogus warnings when compiling test-intprops.c.
Fortunately, the warnings do not cause a failure.
* lib/c-ctype.h (_C_CTYPE_LOWER_A_THRU_F_N, _C_CTYPE_LOWER_N):
Rename parameter to avoid PGI warning about ‘#define f(n) 'n'’.
My goodness, PGI goes back a long ways - this predates C89!
* lib/gl_anylinked_list2.h (ASYNCSAFE): Fix bug caught by PGI.
For example, ASYNCSAFE (const void *) should expand to
‘const void *volatile’, not to ‘volatile const void *’.
* lib/spawn.in.h (POSIX_SPAWN_USEVFORK): Don't define if already defined.
* lib/verify.h (verify) [!__GNUC__]:
Use shorter albeit meaningless string to bypass silly compiler limits.
* tests/infinity.h (Infinityf, Infinityd, Infinityl) [__PGI]:
* tests/nan.h (NaNf, NaNd, NaNl):
Use static functions to avoid misguided compiler diagnostics.
Is there some reason we don’t use static functions on all platforms?
---
ChangeLog | 21 +++++++++++++++++++++
lib/c-ctype.h | 20 ++++++++++----------
lib/gl_anylinked_list2.h | 2 +-
lib/spawn.in.h | 4 +++-
lib/verify.h | 7 ++++++-
tests/infinity.h | 15 +++++++++------
tests/nan.h | 19 +++++++++++++------
7 files changed, 63 insertions(+), 25 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 29d5954..132fa08 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2017-01-30 Paul Eggert <***@cs.ucla.edu>
+
+ Port to PGI 16.10 x86-64
+ This patch fixes one real bug in gl_anylinked_list2.h, along with
+ some minor glitches that are not bugs. It does not silence PGI’s
+ thousands of bogus warnings when compiling test-intprops.c.
+ Fortunately, the warnings do not cause a failure.
+ * lib/c-ctype.h (_C_CTYPE_LOWER_A_THRU_F_N, _C_CTYPE_LOWER_N):
+ Rename parameter to avoid PGI warning about ‘#define f(n) 'n'’.
+ My goodness, PGI goes back a long ways - this predates C89!
+ * lib/gl_anylinked_list2.h (ASYNCSAFE): Fix bug caught by PGI.
+ For example, ASYNCSAFE (const void *) should expand to
+ ‘const void *volatile’, not to ‘volatile const void *’.
+ * lib/spawn.in.h (POSIX_SPAWN_USEVFORK): Don't define if already defined.
+ * lib/verify.h (verify) [!__GNUC__]:
+ Use shorter albeit meaningless string to bypass silly compiler limits.
+ * tests/infinity.h (Infinityf, Infinityd, Infinityl) [__PGI]:
+ * tests/nan.h (NaNf, NaNd, NaNl):
+ Use static functions to avoid misguided compiler diagnostics.
+ Is there some reason we don’t use static functions on all platforms?
+
2017-01-20 Paul Eggert <***@cs.ucla.edu>

parse-datetime: handle timezones reentrantly
diff --git a/lib/c-ctype.h b/lib/c-ctype.h
index bdca1f1..ec6a3a0 100644
--- a/lib/c-ctype.h
+++ b/lib/c-ctype.h
@@ -115,16 +115,16 @@ extern "C" {

/* Cases for lowercase hex letters, and lowercase letters, all offset by N. */

-#define _C_CTYPE_LOWER_A_THRU_F_N(n) \
- case 'a' + (n): case 'b' + (n): case 'c' + (n): case 'd' + (n): \
- case 'e' + (n): case 'f' + (n)
-#define _C_CTYPE_LOWER_N(n) \
- _C_CTYPE_LOWER_A_THRU_F_N(n): \
- case 'g' + (n): case 'h' + (n): case 'i' + (n): case 'j' + (n): \
- case 'k' + (n): case 'l' + (n): case 'm' + (n): case 'n' + (n): \
- case 'o' + (n): case 'p' + (n): case 'q' + (n): case 'r' + (n): \
- case 's' + (n): case 't' + (n): case 'u' + (n): case 'v' + (n): \
- case 'w' + (n): case 'x' + (n): case 'y' + (n): case 'z' + (n)
+#define _C_CTYPE_LOWER_A_THRU_F_N(N) \
+ case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \
+ case 'e' + (N): case 'f' + (N)
+#define _C_CTYPE_LOWER_N(N) \
+ _C_CTYPE_LOWER_A_THRU_F_N(N): \
+ case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \
+ case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \
+ case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \
+ case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \
+ case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N)

/* Cases for hex letters, digits, lower, punct, and upper. */

diff --git a/lib/gl_anylinked_list2.h b/lib/gl_anylinked_list2.h
index c249f31..4545da9 100644
--- a/lib/gl_anylinked_list2.h
+++ b/lib/gl_anylinked_list2.h
@@ -29,7 +29,7 @@
and we use 'volatile' assignments to prevent the compiler from reordering
such assignments. */
#ifdef SIGNAL_SAFE_LIST
-# define ASYNCSAFE(type) *(volatile type *)&
+# define ASYNCSAFE(type) *(type volatile *)&
#else
# define ASYNCSAFE(type)
#endif
diff --git a/lib/spawn.in.h b/lib/spawn.in.h
index e8116f9..b4b9197 100644
--- a/lib/spawn.in.h
+++ b/lib/spawn.in.h
@@ -142,7 +142,8 @@ typedef struct
# endif
#endif
/* A GNU extension. Use the next free bit position. */
-#define POSIX_SPAWN_USEVFORK \
+#ifndef POSIX_SPAWN_USEVFORK
+# define POSIX_SPAWN_USEVFORK \
((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1) \
| POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1) \
| POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1) \
@@ -152,6 +153,7 @@ typedef struct
| POSIX_SPAWN_SETSCHEDULER \
| (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0)) \
+ 1)
+#endif
#if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap
typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap
[(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP
diff --git a/lib/verify.h b/lib/verify.h
index dcaf7ca..dcba9c8 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -248,7 +248,12 @@ template <int w>
/* Verify requirement R at compile-time, as a declaration without a
trailing ';'. */

-#define verify(R) _GL_VERIFY (R, "verify (" #R ")")
+#ifdef __GNUC__
+# define verify(R) _GL_VERIFY (R, "verify (" #R ")")
+#else
+/* PGI barfs if R is long. Play it safe. */
+# define verify(R) _GL_VERIFY (R, "verify (...)")
+#endif

#ifndef __has_builtin
# define __has_builtin(x) 0
diff --git a/tests/infinity.h b/tests/infinity.h
index 431f700..ef5d3bd 100644
--- a/tests/infinity.h
+++ b/tests/infinity.h
@@ -18,8 +18,9 @@
/* Infinityf () returns a 'float' +Infinity. */

/* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f.
- The IBM XL C compiler on z/OS complains. */
-#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
+ The IBM XL C compiler on z/OS complains.
+ PGI 16.10 complains. */
+#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI
static float
Infinityf ()
{
@@ -34,8 +35,9 @@ Infinityf ()
/* Infinityd () returns a 'double' +Infinity. */

/* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0.
- The IBM XL C compiler on z/OS complains. */
-#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
+ The IBM XL C compiler on z/OS complains.
+ PGI 16.10 complains. */
+#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI
static double
Infinityd ()
{
@@ -50,8 +52,9 @@ Infinityd ()
/* Infinityl () returns a 'long double' +Infinity. */

/* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L.
- The IBM XL C compiler on z/OS complains. */
-#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
+ The IBM XL C compiler on z/OS complains.
+ PGI 16.10 complains. */
+#if defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI
static long double
Infinityl ()
{
diff --git a/tests/nan.h b/tests/nan.h
index 48236b5..b5a0f29 100644
--- a/tests/nan.h
+++ b/tests/nan.h
@@ -25,8 +25,11 @@
/* NaNf () returns a 'float' not-a-number. */

/* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke
- on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. */
-#if defined __DECC || defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
+ on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains.
+ PGI 16.10 complains. */
+#if (defined __DECC || defined _MSC_VER \
+ || (defined __MVS__ && defined __IBMC__) \
+ || defined __PGI)
static float
NaNf ()
{
@@ -41,8 +44,11 @@ NaNf ()
/* NaNd () returns a 'double' not-a-number. */

/* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke
- on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains. */
-#if defined __DECC || defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
+ on the expression 0.0 / 0.0. The IBM XL C compiler on z/OS complains.
+ PGI 16.10 complains. */
+#if (defined __DECC || defined _MSC_VER \
+ || (defined __MVS__ && defined __IBMC__) \
+ || defined __PGI)
static double
NaNd ()
{
@@ -59,14 +65,15 @@ NaNd ()
/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
runtime type conversion.
The Microsoft MSVC 9 compiler chokes on the expression 0.0L / 0.0L.
- The IBM XL C compiler on z/OS complains. */
+ The IBM XL C compiler on z/OS complains.
+ PGI 16.10 complains. */
#ifdef __sgi
static long double NaNl ()
{
double zero = 0.0;
return zero / zero;
}
-#elif defined _MSC_VER || (defined __MVS__ && defined __IBMC__)
+#elif defined _MSC_VER || (defined __MVS__ && defined __IBMC__) || defined __PGI
static long double
NaNl ()
{
--
2.9.3
Bruno Haible
2017-01-31 07:17:15 UTC
Permalink
Raw Message
Hi Paul,
Post by Paul Eggert
-# define ASYNCSAFE(type) *(volatile type *)&
+# define ASYNCSAFE(type) *(type volatile *)&
Thanks, a good catch!!
Post by Paul Eggert
+#if (defined __DECC || defined _MSC_VER \
+ || (defined __MVS__ && defined __IBMC__) \
+ || defined __PGI)
Just curious: Why the added parentheses? Because of some (broken) compiler,
or just aesthetics?

Bruno
Paul Eggert
2017-01-31 07:21:25 UTC
Permalink
Raw Message
Post by Bruno Haible
Just curious: Why the added parentheses? Because of some (broken) compiler,
or just aesthetics?
The latter; it's the usual style in the Emacs source code, and Emacs by default
autoindents it that way.

Loading...