This is incorrect, HANDLE is an alias for void*, by returning an integer you are truncating the high 32 buts of the value.  But then you just cast it back to a void* anyway, so i think you should just return void* from the start.  On the posix side you will need to return the fd as a void* as well.  Make sure to use static_cast and not reinterpret_cast, in case int is not the same size as void*<br><div class="gmail_quote"><div dir="ltr">On Sat, Feb 4, 2017 at 2:14 PM Marcos Pividori via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">mpividori created this revision.<br class="gmail_msg">
<br class="gmail_msg">
For Windows, sanitizers work with Handles, not with posix file descriptors, because they use the windows-specific API. So we need to convert the fds to handles before passing them to the sanitizer library.<br class="gmail_msg">
After this change, `close_fd_mask` is fixed for Windows (this fix some tests too).<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D29548" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D29548</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
  lib/Fuzzer/FuzzerIO.cpp<br class="gmail_msg">
  lib/Fuzzer/FuzzerIO.h<br class="gmail_msg">
  lib/Fuzzer/FuzzerIOPosix.cpp<br class="gmail_msg">
  lib/Fuzzer/FuzzerIOWindows.cpp<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Index: lib/Fuzzer/FuzzerIOWindows.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/FuzzerIOWindows.cpp<br class="gmail_msg">
+++ lib/Fuzzer/FuzzerIOWindows.cpp<br class="gmail_msg">
@@ -149,6 +149,10 @@<br class="gmail_msg">
   fclose(Temp);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+int GetHandleFromFd(int fd) {<br class="gmail_msg">
+  return _get_osfhandle(fd);<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 static bool IsSeparator(char C) {<br class="gmail_msg">
   return C == '\\' || C == '/';<br class="gmail_msg">
 }<br class="gmail_msg">
Index: lib/Fuzzer/FuzzerIOPosix.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/FuzzerIOPosix.cpp<br class="gmail_msg">
+++ lib/Fuzzer/FuzzerIOPosix.cpp<br class="gmail_msg">
@@ -83,6 +83,10 @@<br class="gmail_msg">
   fclose(Temp);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+int GetHandleFromFd(int fd) {<br class="gmail_msg">
+  return fd;<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 std::string DirName(const std::string &FileName) {<br class="gmail_msg">
   char *Tmp = new char[FileName.size() + 1];<br class="gmail_msg">
   memcpy(Tmp, FileName.c_str(), FileName.size() + 1);<br class="gmail_msg">
Index: lib/Fuzzer/FuzzerIO.h<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/FuzzerIO.h<br class="gmail_msg">
+++ lib/Fuzzer/FuzzerIO.h<br class="gmail_msg">
@@ -69,6 +69,8 @@<br class="gmail_msg">
<br class="gmail_msg">
 void DiscardOutput(int Fd);<br class="gmail_msg">
<br class="gmail_msg">
+int GetHandleFromFd(int fd);<br class="gmail_msg">
+<br class="gmail_msg">
 }  // namespace fuzzer<br class="gmail_msg">
<br class="gmail_msg">
 #endif  // LLVM_FUZZER_IO_H<br class="gmail_msg">
Index: lib/Fuzzer/FuzzerIO.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/FuzzerIO.cpp<br class="gmail_msg">
+++ lib/Fuzzer/FuzzerIO.cpp<br class="gmail_msg">
@@ -96,7 +96,8 @@<br class="gmail_msg">
     if (NewOutputFile) {<br class="gmail_msg">
       OutputFile = NewOutputFile;<br class="gmail_msg">
       if (EF->__sanitizer_set_report_fd)<br class="gmail_msg">
-        EF->__sanitizer_set_report_fd(reinterpret_cast<void *>(OutputFd));<br class="gmail_msg">
+        EF->__sanitizer_set_report_fd(reinterpret_cast<void *>(<br class="gmail_msg">
+            GetHandleFromFd(OutputFd)));<br class="gmail_msg">
       DiscardOutput(2);<br class="gmail_msg">
     }<br class="gmail_msg">
   }<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>