From bbc000da249fb2f9000ad0ec1c17a53387656fb1 Mon Sep 17 00:00:00 2001
From: Bruno Haible <bruno@clisp.org>
Date: Sun, 18 Sep 2022 18:45:39 +0200
Subject: [PATCH] stdbool: Ensure that 'true' can be used in the preprocessor.

* lib/stdbool.in.h (true): Redefine if it does not evaluate to 1 in the
preprocessor.
---
 ChangeLog        | 6 ++++++
 lib/stdbool.in.h | 7 +++++++
 2 files changed, 13 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index d38fa2dc41..9fc4414496 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2022-09-18  Bruno Haible  <bruno@clisp.org>
+
+	stdbool: Ensure that 'true' can be used in the preprocessor.
+	* lib/stdbool.in.h (true): Redefine if it does not evaluate to 1 in the
+	preprocessor.
+
 2022-09-18  Bruno Haible  <bruno@clisp.org>
 
 	signal: Fix a C++ compilation error due to sched_yield on OpenBSD 6.0.
diff --git a/lib/stdbool.in.h b/lib/stdbool.in.h
index b1613d4f02..125de5a25e 100644
--- a/lib/stdbool.in.h
+++ b/lib/stdbool.in.h
@@ -126,6 +126,13 @@ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
 #  define false false
 #  define true true
 # endif
+/* In Sun C++ 5.11 (Solaris Studio 12.2) and older, 'true' as a preprocessor
+   expression evaluates to 0, not 1.  Fix this by overriding 'true'.  Note that
+   the replacement has to be of type 'bool'.  */
+# if defined __SUNPRO_CC && true != 1
+#  undef true
+#  define true (!false)
+# endif
 #else
 # define false 0
 # define true 1
-- 
2.39.5