The only real issue i see here is that anyone writing a new test will have to remember to do this.<br><br>On the other hand, I can't think of anything better at the moment <br><div class="gmail_quote"><div dir="ltr">On Thu, Feb 9, 2017 at 12:05 AM 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">
We need to export external functions so they are found when calling `GetProcAddress()` on Windows.<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<a href="https://reviews.llvm.org/D29752" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D29752</a><br class="gmail_msg">
<br class="gmail_msg">
Files:<br class="gmail_msg">
  lib/Fuzzer/FuzzerInterface.h<br class="gmail_msg">
  lib/Fuzzer/test/BogusInitializeTest.cpp<br class="gmail_msg">
  lib/Fuzzer/test/CustomCrossOverTest.cpp<br class="gmail_msg">
  lib/Fuzzer/test/CustomMutatorTest.cpp<br class="gmail_msg">
  lib/Fuzzer/test/InitializeTest.cpp<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Index: lib/Fuzzer/test/InitializeTest.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/test/InitializeTest.cpp<br class="gmail_msg">
+++ lib/Fuzzer/test/InitializeTest.cpp<br class="gmail_msg">
@@ -11,6 +11,9 @@<br class="gmail_msg">
<br class="gmail_msg">
 static char *argv0;<br class="gmail_msg">
<br class="gmail_msg">
+#ifdef _WIN32<br class="gmail_msg">
+__declspec( dllexport )<br class="gmail_msg">
+#endif<br class="gmail_msg">
 extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {<br class="gmail_msg">
   assert(*argc > 0);<br class="gmail_msg">
   argv0 = **argv;<br class="gmail_msg">
Index: lib/Fuzzer/test/CustomMutatorTest.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/test/CustomMutatorTest.cpp<br class="gmail_msg">
+++ lib/Fuzzer/test/CustomMutatorTest.cpp<br class="gmail_msg">
@@ -27,6 +27,9 @@<br class="gmail_msg">
   return 0;<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+#ifdef _WIN32<br class="gmail_msg">
+__declspec( dllexport )<br class="gmail_msg">
+#endif<br class="gmail_msg">
 extern "C" size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size,<br class="gmail_msg">
                                           size_t MaxSize, unsigned int Seed) {<br class="gmail_msg">
   static bool Printed;<br class="gmail_msg">
Index: lib/Fuzzer/test/CustomCrossOverTest.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/test/CustomCrossOverTest.cpp<br class="gmail_msg">
+++ lib/Fuzzer/test/CustomCrossOverTest.cpp<br class="gmail_msg">
@@ -32,6 +32,9 @@<br class="gmail_msg">
   return 0;<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
+#ifdef _WIN32<br class="gmail_msg">
+__declspec( dllexport )<br class="gmail_msg">
+#endif<br class="gmail_msg">
 extern "C" size_t LLVMFuzzerCustomCrossOver(const uint8_t *Data1, size_t Size1,<br class="gmail_msg">
                                             const uint8_t *Data2, size_t Size2,<br class="gmail_msg">
                                             uint8_t *Out, size_t MaxOutSize,<br class="gmail_msg">
Index: lib/Fuzzer/test/BogusInitializeTest.cpp<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/test/BogusInitializeTest.cpp<br class="gmail_msg">
+++ lib/Fuzzer/test/BogusInitializeTest.cpp<br class="gmail_msg">
@@ -5,6 +5,9 @@<br class="gmail_msg">
 #include <stddef.h><br class="gmail_msg">
 #include <stdint.h><br class="gmail_msg">
<br class="gmail_msg">
+#ifdef _WIN32<br class="gmail_msg">
+__declspec( dllexport )<br class="gmail_msg">
+#endif<br class="gmail_msg">
 extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {<br class="gmail_msg">
   ***argv = 'X';<br class="gmail_msg">
   return 0;<br class="gmail_msg">
Index: lib/Fuzzer/FuzzerInterface.h<br class="gmail_msg">
===================================================================<br class="gmail_msg">
--- lib/Fuzzer/FuzzerInterface.h<br class="gmail_msg">
+++ lib/Fuzzer/FuzzerInterface.h<br class="gmail_msg">
@@ -19,6 +19,7 @@<br class="gmail_msg">
 #ifndef LLVM_FUZZER_INTERFACE_H<br class="gmail_msg">
 #define LLVM_FUZZER_INTERFACE_H<br class="gmail_msg">
<br class="gmail_msg">
+#include "FuzzerDefs.h"<br class="gmail_msg">
 #include <stddef.h><br class="gmail_msg">
 #include <stdint.h><br class="gmail_msg">
<br class="gmail_msg">
@@ -36,19 +37,22 @@<br class="gmail_msg">
 // If provided, this function will be called by libFuzzer once at startup.<br class="gmail_msg">
 // It may read and modify argc/argv.<br class="gmail_msg">
 // Must return 0.<br class="gmail_msg">
+ATTRIBUTE_INTERFACE<br class="gmail_msg">
 int LLVMFuzzerInitialize(int *argc, char ***argv);<br class="gmail_msg">
<br class="gmail_msg">
 // Optional user-provided custom mutator.<br class="gmail_msg">
 // Mutates raw data in [Data, Data+Size) inplace.<br class="gmail_msg">
 // Returns the new size, which is not greater than MaxSize.<br class="gmail_msg">
 // Given the same Seed produces the same mutation.<br class="gmail_msg">
+ATTRIBUTE_INTERFACE<br class="gmail_msg">
 size_t LLVMFuzzerCustomMutator(uint8_t *Data, size_t Size, size_t MaxSize,<br class="gmail_msg">
                                unsigned int Seed);<br class="gmail_msg">
<br class="gmail_msg">
 // Optional user-provided custom cross-over function.<br class="gmail_msg">
 // Combines pieces of Data1 & Data2 together into Out.<br class="gmail_msg">
 // Returns the new size, which is not greater than MaxOutSize.<br class="gmail_msg">
 // Should produce the same mutation given the same Seed.<br class="gmail_msg">
+ATTRIBUTE_INTERFACE<br class="gmail_msg">
 size_t LLVMFuzzerCustomCrossOver(const uint8_t *Data1, size_t Size1,<br class="gmail_msg">
                                  const uint8_t *Data2, size_t Size2,<br class="gmail_msg">
                                  uint8_t *Out, size_t MaxOutSize,<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
</blockquote></div>