diff --git a/clang/lib/Headers/endian.h b/clang/lib/Headers/endian.h index b2ad3c16710d..aa30d8fc5c49 100644 --- a/clang/lib/Headers/endian.h +++ b/clang/lib/Headers/endian.h @@ -25,8 +25,23 @@ #define LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ #define BIG_ENDIAN __ORDER_BIG_ENDIAN__ +#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) \ @@ -48,7 +63,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 +84,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 diff --git a/clang/test/Headers/endian.c b/clang/test/Headers/endian.c index 0702d8616ca3..5ba341f2096b 100644 --- a/clang/test/Headers/endian.c +++ b/clang/test/Headers/endian.c @@ -6,6 +6,9 @@ #include +_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