diff --git a/src/include/musl/limits.h b/src/include/musl/limits.h index 9620a3b0ac..bcc585be2c 100644 --- a/src/include/musl/limits.h +++ b/src/include/musl/limits.h @@ -1,6 +1,26 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +/* GCC introduces a spurious, tricky inclusion cycle: + * GCC's limits.h + * -> GCC's syslimits.h + * -> GCC's limits.h (again!!!) + * -> glibc/musl's limits.h + * -> define POSIX defines + * -> define ISO C defines + * This works only when GCC's limits.h is included first, but a user override breaks the cycle. Hence, we + * need to manually achieve the cycle here. If GCC is not used (e.g., Clang), then including the compiler's + * limits.h twice should be redundant but harmless. */ + +/* First, get the POSIX defines from glibc/musl's limits.h. When the two macros below are defined, GCC's + * limits.h includes the next limits.h, that is, one from glibc/musl. */ +#define _GCC_LIMITS_H_ +#define _GCC_NEXT_LIMITS_H +#include_next /* IWYU pragma: export */ +#undef _GCC_NEXT_LIMITS_H +#undef _GCC_LIMITS_H_ + +/* Next, get the ISO C defines from GCC's limits.h. */ #include_next /* IWYU pragma: export */ #include