[libcxx] r291773 - Add new macro _LIBCPP_BUILTIN_MEMCMP_ISCONSTEXPR to use in std::char_traits.

Marshall Clow via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 12 08:25:07 PST 2017


Author: marshall
Date: Thu Jan 12 10:25:07 2017
New Revision: 291773

URL: http://llvm.org/viewvc/llvm-project?rev=291773&view=rev
Log:
Add new macro _LIBCPP_BUILTIN_MEMCMP_ISCONSTEXPR to use in std::char_traits. 
This tells whether or not the builtin function __builtin_memcmp is constexpr.
Only defined for clang 4.0 and later, and not true for any shipping version of Apple's clang.


Modified:
    libcxx/trunk/include/__config

Modified: libcxx/trunk/include/__config
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/__config?rev=291773&r1=291772&r2=291773&view=diff
==============================================================================
--- libcxx/trunk/include/__config (original)
+++ libcxx/trunk/include/__config Thu Jan 12 10:25:07 2017
@@ -396,6 +396,15 @@ namespace std {
 #define _LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK __attribute__((__no_sanitize__("unsigned-integer-overflow")))
 #endif 
 
+// A constexpr version of __builtin_memcmp was added in clang 4.0
+#if __has_builtin(__builtin_memcmp)
+# ifdef __apple_build_version__
+// No shipping version of Apple's clang has constexpr __builtin_memcmp
+# elif __clang_major__ > 3
+#  define _LIBCPP_BUILTIN_MEMCMP_ISCONSTEXPR
+# endif
+#endif
+
 #elif defined(_LIBCPP_COMPILER_GCC)
 
 #define _ALIGNAS(x) __attribute__((__aligned__(x)))




More information about the cfe-commits mailing list