[libc][clang-tidy] fix namespace check for externals

Up until now, all references to `errno` were marked with `NOLINT`, since
it was technically calling an external function. This fixes the lint
rules so that `errno`, as well as `malloc`, `calloc`, `realloc`, and
`free` are all allowed to be called as external functions. All of the
relevant `NOLINT` comments have been removed, and the documentation has
been updated.

Reviewed By: sivachandra, lntue, aaron.ballman

Differential Revision: https://reviews.llvm.org/D113946

GitOrigin-RevId: 155f5a6dac62a902a30f60e2717c4ba8fb828139
diff --git a/docs/clang_tidy_checks.rst b/docs/clang_tidy_checks.rst
index ffdc45b..0148067 100644
--- a/docs/clang_tidy_checks.rst
+++ b/docs/clang_tidy_checks.rst
@@ -67,6 +67,11 @@
 This check ensures any function call resolves to a function within the
 __llvm_libc namespace.
 
+There are exceptions for the following functions: 
+``__errno_location`` so that ``errno`` can be set;
+``malloc``, ``calloc``, ``realloc``, ``aligned_alloc``, and ``free`` since they
+are always external and can be intercepted.
+
 .. code-block:: c++
 
     namespace __llvm_libc {
@@ -83,4 +88,7 @@
     // Disallow calling into functions in the global namespace.
     ::strlen("!");
 
+    // Allow calling into specific global functions (explained above)
+    ::malloc(10);
+
     } // namespace __llvm_libc
diff --git a/src/__support/FPUtil/NearestIntegerOperations.h b/src/__support/FPUtil/NearestIntegerOperations.h
index 99e2ba7..6862488 100644
--- a/src/__support/FPUtil/NearestIntegerOperations.h
+++ b/src/__support/FPUtil/NearestIntegerOperations.h
@@ -246,7 +246,7 @@
   FPBits<F> bits(x);
   auto setDomainErrorAndRaiseInvalid = []() {
 #if math_errhandling & MATH_ERRNO
-    errno = EDOM; // NOLINT
+    errno = EDOM;
 #endif
 #if math_errhandling & MATH_ERREXCEPT
     raiseExcept(FE_INVALID);
diff --git a/src/__support/str_to_float.h b/src/__support/str_to_float.h
index 7c26720..7673334 100644
--- a/src/__support/str_to_float.h
+++ b/src/__support/str_to_float.h
@@ -200,7 +200,7 @@
           static_cast<int64_t>(fputil::FloatProperties<T>::exponentBias)) {
     *outputMantissa = 0;
     *outputExp2 = fputil::FPBits<T>::maxExponent;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
   // If the exponent is too small even for a subnormal, return 0.
@@ -210,7 +210,7 @@
                                fputil::FloatProperties<T>::mantissaWidth)) {
     *outputMantissa = 0;
     *outputExp2 = 0;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
 
@@ -253,7 +253,7 @@
   if (exp2 >= fputil::FPBits<T>::maxExponent) {
     *outputMantissa = 0;
     *outputExp2 = fputil::FPBits<T>::maxExponent;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
 
@@ -289,7 +289,7 @@
   }
 
   if (exp2 == 0) {
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
   }
 
   *outputMantissa = finalMantissa;
@@ -391,7 +391,7 @@
       static_cast<int64_t>(fputil::FloatProperties<T>::exponentBias) / 3) {
     *outputMantissa = 0;
     *outputExp2 = fputil::FPBits<T>::maxExponent;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
   // If the exponent is too small even for a subnormal, return 0.
@@ -402,7 +402,7 @@
               2) {
     *outputMantissa = 0;
     *outputExp2 = 0;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
 
@@ -467,7 +467,7 @@
     // This indicates an overflow, so we make the result INF and set errno.
     *outputExp2 = (1 << fputil::FloatProperties<T>::exponentWidth) - 1;
     *outputMantissa = 0;
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
     return;
   }
 
@@ -483,7 +483,7 @@
       // Return 0 if the exponent is too small.
       *outputMantissa = 0;
       *outputExp2 = 0;
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
       return;
     }
   }
@@ -511,12 +511,12 @@
     ++biasedExponent;
 
     if (biasedExponent == INF_EXP) {
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
     }
   }
 
   if (biasedExponent == 0) {
-    errno = ERANGE; // NOLINT
+    errno = ERANGE;
   }
 
   *outputMantissa = mantissa & fputil::FloatProperties<T>::mantissaMask;
diff --git a/src/__support/str_to_integer.h b/src/__support/str_to_integer.h
index ec7f6f5..3ecf098 100644
--- a/src/__support/str_to_integer.h
+++ b/src/__support/str_to_integer.h
@@ -74,7 +74,7 @@
   const char *original_src = src;
 
   if (base < 0 || base == 1 || base > 36) {
-    errno = EINVAL; // NOLINT
+    errno = EINVAL;
     return 0;
   }
 
@@ -114,19 +114,19 @@
     // the result cannot change, but we still need to advance src to the end of
     // the number.
     if (result == ABS_MAX) {
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
       continue;
     }
 
     if (result > ABS_MAX_DIV_BY_BASE) {
       result = ABS_MAX;
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
     } else {
       result = result * base;
     }
     if (result > ABS_MAX - cur_digit) {
       result = ABS_MAX;
-      errno = ERANGE; // NOLINT
+      errno = ERANGE;
     } else {
       result = result + cur_digit;
     }
diff --git a/src/math/generic/math_utils.h b/src/math/generic/math_utils.h
index ef86e88..11c2bd1 100644
--- a/src/math/generic/math_utils.h
+++ b/src/math/generic/math_utils.h
@@ -55,7 +55,7 @@
 
 template <typename T> static inline T with_errno(T x, int err) {
   if (math_errhandling & MATH_ERRNO)
-    errno = err; // NOLINT
+    errno = err;
   return x;
 }
 
diff --git a/src/string/strdup.cpp b/src/string/strdup.cpp
index ddda3a6..ee324b0 100644
--- a/src/string/strdup.cpp
+++ b/src/string/strdup.cpp
@@ -21,7 +21,7 @@
     return nullptr;
   }
   size_t len = internal::string_length(src) + 1;
-  char *dest = reinterpret_cast<char *>(::malloc(len)); // NOLINT
+  char *dest = reinterpret_cast<char *>(::malloc(len));
   if (dest == nullptr) {
     return nullptr;
   }
diff --git a/src/string/strndup.cpp b/src/string/strndup.cpp
index d8e0818..4856a48 100644
--- a/src/string/strndup.cpp
+++ b/src/string/strndup.cpp
@@ -23,7 +23,7 @@
   size_t len = internal::string_length(src);
   if (len > size)
     len = size;
-  char *dest = reinterpret_cast<char *>(::malloc(len + 1)); // NOLINT
+  char *dest = reinterpret_cast<char *>(::malloc(len + 1));
   if (dest == nullptr)
     return nullptr;
   inline_memcpy(dest, src, len + 1);