[libcxx-commits] [libcxx] ba1e13d - [libc++][math.h] move #undefs to the top and guard explicitly against MSVCRT instead

Nikolas Klauser via libcxx-commits libcxx-commits at lists.llvm.org
Tue Nov 29 15:50:19 PST 2022


Author: Nikolas Klauser
Date: 2022-11-30T00:50:12+01:00
New Revision: ba1e13d5245977686d37b81ed31ad07a58e35721

URL: https://github.com/llvm/llvm-project/commit/ba1e13d5245977686d37b81ed31ad07a58e35721
DIFF: https://github.com/llvm/llvm-project/commit/ba1e13d5245977686d37b81ed31ad07a58e35721.diff

LOG: [libc++][math.h] move #undefs to the top and guard explicitly against MSVCRT instead

Reviewed By: ldionne, #libc

Spies: #libc_vendors, EricWF, libcxx-commits

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

Added: 
    

Modified: 
    libcxx/include/math.h

Removed: 
    


################################################################################
diff  --git a/libcxx/include/math.h b/libcxx/include/math.h
index 839be4d11f6bb..b3990f314046e 100644
--- a/libcxx/include/math.h
+++ b/libcxx/include/math.h
@@ -312,11 +312,56 @@ extern "C++" {
 #include <stdlib.h>
 #include <type_traits>
 
-// signbit
+
+#    ifdef fpclassify
+#      undef fpclassify
+#    endif
 
 #    ifdef signbit
 #      undef signbit
-#    endif // signbit
+#    endif
+
+#    ifdef isfinite
+#      undef isfinite
+#    endif
+
+#    ifdef isinf
+#      undef isinf
+#    endif
+
+#    ifdef isnan
+#      undef isnan
+#    endif
+
+#    ifdef isnormal
+#      undef isnormal
+#    endif
+
+#    ifdef isgreater
+#      undef isgreater
+#    endif
+
+#    ifdef isgreaterequal
+#      undef isgreaterequal
+#    endif
+
+#    ifdef isless
+#      undef isless
+#    endif
+
+#    ifdef islessequal
+#      undef islessequal
+#    endif
+
+#    ifdef islessgreater
+#      undef islessgreater
+#    endif
+
+#    ifdef isunordered
+#      undef isunordered
+#    endif
+
+// signbit
 
 template <class _A1, std::__enable_if_t<std::is_floating_point<_A1>::value, int> = 0>
 inline _LIBCPP_HIDE_FROM_ABI bool signbit(_A1 __x) _NOEXCEPT {
@@ -335,10 +380,6 @@ inline _LIBCPP_HIDE_FROM_ABI bool signbit(_A1) _NOEXCEPT {
 
 // fpclassify
 
-#    ifdef fpclassify
-#      undef fpclassify
-#    endif // fpclassify
-
 template <class _A1, std::__enable_if_t<std::is_floating_point<_A1>::value, int> = 0>
 inline _LIBCPP_HIDE_FROM_ABI int fpclassify(_A1 __x) _NOEXCEPT {
   return __builtin_fpclassify(FP_NAN, FP_INFINITE, FP_NORMAL, FP_SUBNORMAL, FP_ZERO, __x);
@@ -349,10 +390,10 @@ inline _LIBCPP_HIDE_FROM_ABI int fpclassify(_A1 __x) _NOEXCEPT {
   return __x == 0 ? FP_ZERO : FP_NORMAL;
 }
 
-// isfinite
+// The MSVC runtime already provides these functions as templates
+#ifndef _LIBCPP_MSVCRT
 
-#    ifdef isfinite
-#      undef isfinite
+// isfinite
 
 template <class _A1,
           std::__enable_if_t<std::is_arithmetic<_A1>::value && std::numeric_limits<_A1>::has_infinity, int> = 0>
@@ -366,13 +407,8 @@ inline _LIBCPP_HIDE_FROM_ABI bool isfinite(_A1) _NOEXCEPT {
   return true;
 }
 
-#    endif // isfinite
-
 // isinf
 
-#    ifdef isinf
-#      undef isinf
-
 template <class _A1,
           std::__enable_if_t<std::is_arithmetic<_A1>::value && std::numeric_limits<_A1>::has_infinity, int> = 0>
 inline _LIBCPP_HIDE_FROM_ABI bool isinf(_A1 __x) _NOEXCEPT {
@@ -394,13 +430,8 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD bool isinf(double __x) _
 inline _LIBCPP_HIDE_FROM_ABI bool isinf(long double __x) _NOEXCEPT { return __builtin_isinf(__x); }
 #      endif
 
-#    endif // isinf
-
 // isnan
 
-#    ifdef isnan
-#      undef isnan
-
 template <class _A1, std::__enable_if_t<std::is_floating_point<_A1>::value, int> = 0>
 inline _LIBCPP_HIDE_FROM_ABI bool isnan(_A1 __x) _NOEXCEPT {
   return __builtin_isnan(__x);
@@ -419,13 +450,8 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_PREFERRED_OVERLOAD bool isnan(double __x) _
 inline _LIBCPP_HIDE_FROM_ABI bool isnan(long double __x) _NOEXCEPT { return __builtin_isnan(__x); }
 #      endif
 
-#    endif // isnan
-
 // isnormal
 
-#    ifdef isnormal
-#      undef isnormal
-
 template <class _A1, std::__enable_if_t<std::is_floating_point<_A1>::value, int> = 0>
 inline _LIBCPP_HIDE_FROM_ABI bool isnormal(_A1 __x) _NOEXCEPT {
   return __builtin_isnormal(__x);
@@ -436,13 +462,8 @@ inline _LIBCPP_HIDE_FROM_ABI bool isnormal(_A1 __x) _NOEXCEPT {
   return __x != 0;
 }
 
-#    endif // isnormal
-
 // isgreater
 
-#    ifdef isgreater
-#      undef isgreater
-
 template <class _A1,
           class _A2,
           std::__enable_if_t<std::is_arithmetic<_A1>::value && std::is_arithmetic<_A2>::value, int> = 0>
@@ -451,13 +472,8 @@ inline _LIBCPP_HIDE_FROM_ABI bool isgreater(_A1 __x, _A2 __y) _NOEXCEPT {
   return __builtin_isgreater((type)__x, (type)__y);
 }
 
-#    endif // isgreater
-
 // isgreaterequal
 
-#    ifdef isgreaterequal
-#      undef isgreaterequal
-
 template <class _A1,
           class _A2,
           std::__enable_if_t<std::is_arithmetic<_A1>::value && std::is_arithmetic<_A2>::value, int> = 0>
@@ -466,13 +482,8 @@ inline _LIBCPP_HIDE_FROM_ABI bool isgreaterequal(_A1 __x, _A2 __y) _NOEXCEPT {
   return __builtin_isgreaterequal((type)__x, (type)__y);
 }
 
-#    endif // isgreaterequal
-
 // isless
 
-#    ifdef isless
-#      undef isless
-
 template <class _A1,
           class _A2,
           std::__enable_if_t<std::is_arithmetic<_A1>::value && std::is_arithmetic<_A2>::value, int> = 0>
@@ -481,13 +492,8 @@ inline _LIBCPP_HIDE_FROM_ABI bool isless(_A1 __x, _A2 __y) _NOEXCEPT {
   return __builtin_isless((type)__x, (type)__y);
 }
 
-#    endif // isless
-
 // islessequal
 
-#    ifdef islessequal
-#      undef islessequal
-
 template <class _A1,
           class _A2,
           std::__enable_if_t<std::is_arithmetic<_A1>::value && std::is_arithmetic<_A2>::value, int> = 0>
@@ -496,13 +502,8 @@ inline _LIBCPP_HIDE_FROM_ABI bool islessequal(_A1 __x, _A2 __y) _NOEXCEPT {
   return __builtin_islessequal((type)__x, (type)__y);
 }
 
-#    endif // islessequal
-
 // islessgreater
 
-#    ifdef islessgreater
-#      undef islessgreater
-
 template <class _A1,
           class _A2,
           std::__enable_if_t<std::is_arithmetic<_A1>::value && std::is_arithmetic<_A2>::value, int> = 0>
@@ -511,13 +512,8 @@ inline _LIBCPP_HIDE_FROM_ABI bool islessgreater(_A1 __x, _A2 __y) _NOEXCEPT {
   return __builtin_islessgreater((type)__x, (type)__y);
 }
 
-#    endif // islessgreater
-
 // isunordered
 
-#    ifdef isunordered
-#      undef isunordered
-
 template <class _A1,
           class _A2,
           std::__enable_if_t<std::is_arithmetic<_A1>::value && std::is_arithmetic<_A2>::value, int> = 0>
@@ -526,7 +522,7 @@ inline _LIBCPP_HIDE_FROM_ABI bool isunordered(_A1 __x, _A2 __y) _NOEXCEPT {
   return __builtin_isunordered((type)__x, (type)__y);
 }
 
-#    endif // isunordered
+#endif // _LIBCPP_MSVCRT
 
 // abs
 //


        


More information about the libcxx-commits mailing list