[clang] [clang][headers][endian.h] add some common extensions (PR #187565)
David Tenty via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 19 19:17:25 PDT 2026
https://github.com/daltenty updated https://github.com/llvm/llvm-project/pull/187565
>From 6313df5803ccafbd79f38bc4f68958e65ad15eb6 Mon Sep 17 00:00:00 2001
From: David Tenty <daltenty at ibm.com>
Date: Thu, 19 Mar 2026 14:38:52 -0400
Subject: [PATCH 1/4] Add PDP_ENDIAN macro for compat
---
clang/lib/Headers/endian.h | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/clang/lib/Headers/endian.h b/clang/lib/Headers/endian.h
index b2ad3c16710d7..79a174aaf5854 100644
--- a/clang/lib/Headers/endian.h
+++ b/clang/lib/Headers/endian.h
@@ -25,6 +25,7 @@
#define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__
#define BIG_ENDIAN __ORDER_BIG_ENDIAN__
+#define PDP_ENDIAN __ORDER_PDP_ENDIAN__
#define BYTE_ORDER __BYTE_ORDER__
#if BYTE_ORDER == LITTLE_ENDIAN
@@ -48,7 +49,7 @@
#define le32toh(x) __CLANG_ENDIAN_CAST(static_cast, uint32_t, x)
#define le64toh(x) __CLANG_ENDIAN_CAST(static_cast, uint64_t, x)
-#else
+#elif BYTE_ORDER == BIG_ENDIAN
#define htobe16(x) __CLANG_ENDIAN_CAST(static_cast, uint16_t, x)
#define htobe32(x) __CLANG_ENDIAN_CAST(static_cast, uint32_t, x)
@@ -69,6 +70,8 @@
#define le64toh(x) \
__builtin_bswap64(__CLANG_ENDIAN_CAST(static_cast, uint64_t, x))
+#else
+#error "Unsupported endianness"
#endif
#endif // __has_include_next
#endif // __CLANG_ENDIAN_H
>From 43265f0acccdad416229c89a6b8309278804836b Mon Sep 17 00:00:00 2001
From: David Tenty <daltenty at ibm.com>
Date: Thu, 19 Mar 2026 14:41:29 -0400
Subject: [PATCH 2/4] Add some compat macros
---
clang/lib/Headers/endian.h | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/clang/lib/Headers/endian.h b/clang/lib/Headers/endian.h
index 79a174aaf5854..288c1a76dcec7 100644
--- a/clang/lib/Headers/endian.h
+++ b/clang/lib/Headers/endian.h
@@ -28,6 +28,21 @@
#define PDP_ENDIAN __ORDER_PDP_ENDIAN__
#define BYTE_ORDER __BYTE_ORDER__
+
+// Define some compatibility macros if they are not defined.
+#ifndef __BYTE_ORDER
+#define __BYTE_ORDER BYTE_ORDER
+#endif
+#ifndef __LITTLE_ENDIAN
+#define __LITTLE_ENDIAN LITTLE_ENDIAN
+#endif
+#ifndef __BIG_ENDIAN
+#define __BIG_ENDIAN BIG_ENDIAN
+#endif
+#ifndef __PDP_ENDIAN
+#define __PDP_ENDIAN PDP_ENDIAN
+#endif
+
#if BYTE_ORDER == LITTLE_ENDIAN
#define htobe16(x) \
>From ec8b591e71b4a3dc5d57a9805f501f594496be93 Mon Sep 17 00:00:00 2001
From: David Tenty <daltenty at ibm.com>
Date: Thu, 19 Mar 2026 17:21:03 -0400
Subject: [PATCH 3/4] Add test
---
clang/test/Headers/endian.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/clang/test/Headers/endian.c b/clang/test/Headers/endian.c
index 0702d8616ca38..5ba341f2096be 100644
--- a/clang/test/Headers/endian.c
+++ b/clang/test/Headers/endian.c
@@ -6,6 +6,9 @@
#include <endian.h>
+_Static_assert(__LITTLE_ENDIAN == __ORDER_LITTLE_ENDIAN__, "");
+_Static_assert(__BIG_ENDIAN == __ORDER_BIG_ENDIAN__, "");
+_Static_assert(__PDP_ENDIAN == __ORDER_PDP_ENDIAN__, "");
#if BYTE_ORDER == BIG_ENDIAN
>From 0722be7182340f0f0851d6e9a6246dcbf0e47b0f Mon Sep 17 00:00:00 2001
From: David Tenty <daltenty at ibm.com>
Date: Thu, 19 Mar 2026 17:21:11 -0400
Subject: [PATCH 4/4] Clang format
---
clang/lib/Headers/endian.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/clang/lib/Headers/endian.h b/clang/lib/Headers/endian.h
index 288c1a76dcec7..aa30d8fc5c49b 100644
--- a/clang/lib/Headers/endian.h
+++ b/clang/lib/Headers/endian.h
@@ -28,7 +28,6 @@
#define PDP_ENDIAN __ORDER_PDP_ENDIAN__
#define BYTE_ORDER __BYTE_ORDER__
-
// Define some compatibility macros if they are not defined.
#ifndef __BYTE_ORDER
#define __BYTE_ORDER BYTE_ORDER
More information about the cfe-commits
mailing list