<div dir="ltr">Yes, these changes are needed for <a href="https://reviews.llvm.org/D29751">https://reviews.llvm.org/D29751</a><br>Another option is to ensure that all of these tests include the header `FuzzerInterface.h`. But I think it is better to make the `dllexport` explicit in the function definition.<br>Thanks,<br>Marcos</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 9, 2017 at 8:57 AM, Zachary Turner <span dir="ltr"><<a href="mailto:zturner@google.com" target="_blank">zturner@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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="HOEnZb"><div class="h5"><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" target="_blank">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="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
We need to export external functions so they are found when calling `GetProcAddress()` on Windows.<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
<a href="https://reviews.llvm.org/D29752" rel="noreferrer" class="m_6683348438943728087gmail_msg" target="_blank">https://reviews.llvm.org/<wbr>D29752</a><br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
Files:<br class="m_6683348438943728087gmail_msg">
  lib/Fuzzer/FuzzerInterface.h<br class="m_6683348438943728087gmail_msg">
  lib/Fuzzer/test/<wbr>BogusInitializeTest.cpp<br class="m_6683348438943728087gmail_msg">
  lib/Fuzzer/test/<wbr>CustomCrossOverTest.cpp<br class="m_6683348438943728087gmail_msg">
  lib/Fuzzer/test/<wbr>CustomMutatorTest.cpp<br class="m_6683348438943728087gmail_msg">
  lib/Fuzzer/test/<wbr>InitializeTest.cpp<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
Index: lib/Fuzzer/test/<wbr>InitializeTest.cpp<br class="m_6683348438943728087gmail_msg">
==============================<wbr>==============================<wbr>=======<br class="m_6683348438943728087gmail_msg">
--- lib/Fuzzer/test/<wbr>InitializeTest.cpp<br class="m_6683348438943728087gmail_msg">
+++ lib/Fuzzer/test/<wbr>InitializeTest.cpp<br class="m_6683348438943728087gmail_msg">
@@ -11,6 +11,9 @@<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
 static char *argv0;<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
+#ifdef _WIN32<br class="m_6683348438943728087gmail_msg">
+__declspec( dllexport )<br class="m_6683348438943728087gmail_msg">
+#endif<br class="m_6683348438943728087gmail_msg">
 extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {<br class="m_6683348438943728087gmail_msg">
   assert(*argc > 0);<br class="m_6683348438943728087gmail_msg">
   argv0 = **argv;<br class="m_6683348438943728087gmail_msg">
Index: lib/Fuzzer/test/<wbr>CustomMutatorTest.cpp<br class="m_6683348438943728087gmail_msg">
==============================<wbr>==============================<wbr>=======<br class="m_6683348438943728087gmail_msg">
--- lib/Fuzzer/test/<wbr>CustomMutatorTest.cpp<br class="m_6683348438943728087gmail_msg">
+++ lib/Fuzzer/test/<wbr>CustomMutatorTest.cpp<br class="m_6683348438943728087gmail_msg">
@@ -27,6 +27,9 @@<br class="m_6683348438943728087gmail_msg">
   return 0;<br class="m_6683348438943728087gmail_msg">
 }<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
+#ifdef _WIN32<br class="m_6683348438943728087gmail_msg">
+__declspec( dllexport )<br class="m_6683348438943728087gmail_msg">
+#endif<br class="m_6683348438943728087gmail_msg">
 extern "C" size_t LLVMFuzzerCustomMutator(uint8_<wbr>t *Data, size_t Size,<br class="m_6683348438943728087gmail_msg">
                                           size_t MaxSize, unsigned int Seed) {<br class="m_6683348438943728087gmail_msg">
   static bool Printed;<br class="m_6683348438943728087gmail_msg">
Index: lib/Fuzzer/test/<wbr>CustomCrossOverTest.cpp<br class="m_6683348438943728087gmail_msg">
==============================<wbr>==============================<wbr>=======<br class="m_6683348438943728087gmail_msg">
--- lib/Fuzzer/test/<wbr>CustomCrossOverTest.cpp<br class="m_6683348438943728087gmail_msg">
+++ lib/Fuzzer/test/<wbr>CustomCrossOverTest.cpp<br class="m_6683348438943728087gmail_msg">
@@ -32,6 +32,9 @@<br class="m_6683348438943728087gmail_msg">
   return 0;<br class="m_6683348438943728087gmail_msg">
 }<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
+#ifdef _WIN32<br class="m_6683348438943728087gmail_msg">
+__declspec( dllexport )<br class="m_6683348438943728087gmail_msg">
+#endif<br class="m_6683348438943728087gmail_msg">
 extern "C" size_t LLVMFuzzerCustomCrossOver(<wbr>const uint8_t *Data1, size_t Size1,<br class="m_6683348438943728087gmail_msg">
                                             const uint8_t *Data2, size_t Size2,<br class="m_6683348438943728087gmail_msg">
                                             uint8_t *Out, size_t MaxOutSize,<br class="m_6683348438943728087gmail_msg">
Index: lib/Fuzzer/test/<wbr>BogusInitializeTest.cpp<br class="m_6683348438943728087gmail_msg">
==============================<wbr>==============================<wbr>=======<br class="m_6683348438943728087gmail_msg">
--- lib/Fuzzer/test/<wbr>BogusInitializeTest.cpp<br class="m_6683348438943728087gmail_msg">
+++ lib/Fuzzer/test/<wbr>BogusInitializeTest.cpp<br class="m_6683348438943728087gmail_msg">
@@ -5,6 +5,9 @@<br class="m_6683348438943728087gmail_msg">
 #include <stddef.h><br class="m_6683348438943728087gmail_msg">
 #include <stdint.h><br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
+#ifdef _WIN32<br class="m_6683348438943728087gmail_msg">
+__declspec( dllexport )<br class="m_6683348438943728087gmail_msg">
+#endif<br class="m_6683348438943728087gmail_msg">
 extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {<br class="m_6683348438943728087gmail_msg">
   ***argv = 'X';<br class="m_6683348438943728087gmail_msg">
   return 0;<br class="m_6683348438943728087gmail_msg">
Index: lib/Fuzzer/FuzzerInterface.h<br class="m_6683348438943728087gmail_msg">
==============================<wbr>==============================<wbr>=======<br class="m_6683348438943728087gmail_msg">
--- lib/Fuzzer/FuzzerInterface.h<br class="m_6683348438943728087gmail_msg">
+++ lib/Fuzzer/FuzzerInterface.h<br class="m_6683348438943728087gmail_msg">
@@ -19,6 +19,7 @@<br class="m_6683348438943728087gmail_msg">
 #ifndef LLVM_FUZZER_INTERFACE_H<br class="m_6683348438943728087gmail_msg">
 #define LLVM_FUZZER_INTERFACE_H<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
+#include "FuzzerDefs.h"<br class="m_6683348438943728087gmail_msg">
 #include <stddef.h><br class="m_6683348438943728087gmail_msg">
 #include <stdint.h><br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
@@ -36,19 +37,22 @@<br class="m_6683348438943728087gmail_msg">
 // If provided, this function will be called by libFuzzer once at startup.<br class="m_6683348438943728087gmail_msg">
 // It may read and modify argc/argv.<br class="m_6683348438943728087gmail_msg">
 // Must return 0.<br class="m_6683348438943728087gmail_msg">
+ATTRIBUTE_INTERFACE<br class="m_6683348438943728087gmail_msg">
 int LLVMFuzzerInitialize(int *argc, char ***argv);<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
 // Optional user-provided custom mutator.<br class="m_6683348438943728087gmail_msg">
 // Mutates raw data in [Data, Data+Size) inplace.<br class="m_6683348438943728087gmail_msg">
 // Returns the new size, which is not greater than MaxSize.<br class="m_6683348438943728087gmail_msg">
 // Given the same Seed produces the same mutation.<br class="m_6683348438943728087gmail_msg">
+ATTRIBUTE_INTERFACE<br class="m_6683348438943728087gmail_msg">
 size_t LLVMFuzzerCustomMutator(uint8_<wbr>t *Data, size_t Size, size_t MaxSize,<br class="m_6683348438943728087gmail_msg">
                                unsigned int Seed);<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
 // Optional user-provided custom cross-over function.<br class="m_6683348438943728087gmail_msg">
 // Combines pieces of Data1 & Data2 together into Out.<br class="m_6683348438943728087gmail_msg">
 // Returns the new size, which is not greater than MaxOutSize.<br class="m_6683348438943728087gmail_msg">
 // Should produce the same mutation given the same Seed.<br class="m_6683348438943728087gmail_msg">
+ATTRIBUTE_INTERFACE<br class="m_6683348438943728087gmail_msg">
 size_t LLVMFuzzerCustomCrossOver(<wbr>const uint8_t *Data1, size_t Size1,<br class="m_6683348438943728087gmail_msg">
                                  const uint8_t *Data2, size_t Size2,<br class="m_6683348438943728087gmail_msg">
                                  uint8_t *Out, size_t MaxOutSize,<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
<br class="m_6683348438943728087gmail_msg">
</blockquote></div>
</div></div></blockquote></div><br></div>