[libc-commits] [libc] [libc] Add limits.h header. (PR #78887)

Nick Desaulniers via libc-commits libc-commits at lists.llvm.org
Tue Jan 23 11:16:39 PST 2024


================
@@ -0,0 +1,247 @@
+//===-- Definition of macros from limits.h --------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef __LLVM_LIBC_MACROS_LIMITS_MACROS_H
+#define __LLVM_LIBC_MACROS_LIMITS_MACROS_H
+
+#if __has_include_next(<limits.h>)
+
+// Suppress `#include_next is a language extension` warnings.
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wgnu-include-next"
+#elif defined(__GNUC__) // gcc
+#if !defined _GCC_LIMITS_H_
+#define _GCC_LIMITS_H_
+#endif
+#pragma GCC system_header
+#endif // __clang__, __GNUC__
+
+// Include compiler's header
+#include_next <limits.h>
+
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif // __clang__
+
+#endif // __has_include_next(<limits.h>)
+
+// Supplement missing macros.
+
----------------
nickdesaulniers wrote:

> Right, but we don't //need// them; they should come from the compiler's resource headers which we should always expect to be able to rely on.

Ok, so looking at GCC's resource headers, it seems that GCC only defines `LLONG_MIN`, `LLONG_MAX` and `ULLONG_MAX` `if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L` which I think is a problem for C++, and our libc/test/src/__support/CPP/limits_test.cpp which references those.  So those are the minimum we may want to just define ourselves.

https://github.com/llvm/llvm-project/pull/78887


More information about the libc-commits mailing list