summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2022-09-10 18:56:14 +0200
committerBruno Haible <bruno@clisp.org>2022-09-10 19:02:29 +0200
commit7986a219dcb6a003eb44aa4d6acffbef23a539cd (patch)
tree5e8ba3db658d99ad9a8039cc6351594f0a0d8ade
parent2f858e5e4392f6e0dc60ab92670a25eaa9212135 (diff)
downloadgnulib-7986a219dcb6a003eb44aa4d6acffbef23a539cd.tar.gz
uchar: Work around error in C++ mode on AIX 7.2 with xlclang.
* lib/uchar.in.h (char16_t, char32_t): On AIX with xlclang++, define these as macros. * doc/posix-headers/uchar.texi: Document the AIX + xlclang++ bug.
-rw-r--r--ChangeLog7
-rw-r--r--doc/posix-headers/uchar.texi3
-rw-r--r--lib/uchar.in.h8
3 files changed, 18 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index cb60228ec3..8b8f32ad17 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2022-09-10 Bruno Haible <bruno@clisp.org>
+
+ uchar: Work around error in C++ mode on AIX 7.2 with xlclang.
+ * lib/uchar.in.h (char16_t, char32_t): On AIX with xlclang++, define
+ these as macros.
+ * doc/posix-headers/uchar.texi: Document the AIX + xlclang++ bug.
+
2022-09-10 Paul Eggert <eggert@cs.ucla.edu>
Rely on new stdbool behavior
diff --git a/doc/posix-headers/uchar.texi b/doc/posix-headers/uchar.texi
index ce5ecaf6a8..945ce665fd 100644
--- a/doc/posix-headers/uchar.texi
+++ b/doc/posix-headers/uchar.texi
@@ -12,6 +12,9 @@ Portability problems fixed by Gnulib:
@item
This header file is missing on many non-glibc platforms:
glibc 2.15, macOS 11.1, FreeBSD 6.4, NetBSD 9.0, OpenBSD 6.7, Minix 3.1.8, AIX 7.1, HP-UX 11.31, IRIX 6.5, Solaris 11.3, Cygwin, mingw, MSVC 9.
+@item
+This file produces compilation errors in C++ mode on some platforms:
+AIX 7.2 with xlclang++.
@end itemize
Portability problems not fixed by Gnulib:
diff --git a/lib/uchar.in.h b/lib/uchar.in.h
index e6a5cddf86..15fd7bc1eb 100644
--- a/lib/uchar.in.h
+++ b/lib/uchar.in.h
@@ -28,6 +28,14 @@
@PRAGMA_COLUMNS@
#if @HAVE_UCHAR_H@
+/* On AIX 7.2 with xlclang++, /usr/include/uchar.h produces compilation errors
+ because it contains typedef definitions of char16_t and char32_t, however
+ char16_t and char32_t are keywords in this situation. To work around it,
+ define char16_t and char32_t as macros. */
+# if defined __cplusplus && defined _AIX && defined __ibmxl__ && defined __clang__
+# define char16_t gl_char16_t
+# define char32_t gl_char32_t
+# endif
# @INCLUDE_NEXT@ @NEXT_UCHAR_H@
#endif