compnerd requested changes to this revision.
compnerd added inline comments.


================
Comment at: include/__config:232-235
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
+
----------------
bcraig wrote:
> I can see this helping when we are build libc++, but I don't think it helps 
> client apps.  They could have included windows.h before including our headers.
> 
> Don't get me wrong, I dislike the min and max macros, and bear no hard 
> feelings towards people that define this project wide on the command line, 
> I'm just not sure it will get things done right here.
> 
> In the past, I've just surrounded my min and max declarations with 
> parenthesis to suppress macro expansion.
Yeah, I don't think that this should be defined in `__config`.  Can we do 
something like `#pragma push_macro` and `#pragma pop_macro` in the necessary 
files?


================
Comment at: include/stdio.h:113-118
 #if defined(_LIBCPP_MSVCRT)
-extern "C++" {
-#include "support/win32/support.h"
+extern "C" {
+int vasprintf(char **sptr, const char *__restrict fmt, va_list ap);
+int asprintf(char **sptr, const char *__restrict fmt, ...);
 }
 #endif
----------------
Should this be hoisted above the `#ifdef __cplusplus`?  This seems like it 
should be defined by `stdio.h` but isn't in msvcrt?


================
Comment at: include/support/win32/locale_win32.h:24
+#define LC_MESSAGES_MASK _M_MESSAGES
+#define LC_ALL_MASK (  LC_COLLATE_MASK \
+                     | LC_CTYPE_MASK \
----------------
Can you please clang-format this block?


================
Comment at: include/support/win32/msvc_builtin_support.h:33-51
+_LIBCPP_ALWAYS_INLINE int __builtin_popcount(unsigned int x)
+{
+  // Binary: 0101...
+  static const unsigned int m1 = 0x55555555;
+  // Binary: 00110011..
+  static const unsigned int m2 = 0x33333333;
+  // Binary:  4 zeros,  4 ones ...
----------------
I think I prefer the following implementation:

    _LIBCPP_ALWAYS_INLINE int __builtin_popcount(unsigned int value) {
      return __popcnt(value);
    }


================
Comment at: include/support/win32/msvc_builtin_support.h:58-76
+_LIBCPP_ALWAYS_INLINE int __builtin_popcountll(unsigned long long x)
+{
+  // Binary: 0101...
+  static const unsigned long long m1 = 0x5555555555555555;
+  // Binary: 00110011..
+  static const unsigned long long m2 = 0x3333333333333333;
+  // Binary:  4 zeros,  4 ones ...
----------------
I think I prefer the following implementation:

    _LIBCPP_ALWAYS_INLINE int __builtin_popcountll(unsigned long long value) {
      return __popcnt64(value);
    }


================
Comment at: src/string.cpp:430
 #else
-    return static_cast<int (__cdecl*)(wchar_t* __restrict, size_t, const 
wchar_t*__restrict, ...)>(swprintf);
+    return static_cast<int (__cdecl*)(wchar_t* __restrict, size_t, const 
wchar_t*__restrict, ...)>(_snwprintf);
 #endif
----------------
This seems scary.  Why do we need to cast the function?


https://reviews.llvm.org/D32988



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to