[libFuzzer] make LLVMFuzzerTestOneInput (the fuzzer target function) return int instead of void. The actual return value is not *yet* used (and expected to be 0). This change is API breaking, so the fuzzers will need to be updated.

llvm-svn: 249214
diff --git a/llvm/lib/Fuzzer/test/CounterTest.cpp b/llvm/lib/Fuzzer/test/CounterTest.cpp
index 29ddb02..b61f419 100644
--- a/llvm/lib/Fuzzer/test/CounterTest.cpp
+++ b/llvm/lib/Fuzzer/test/CounterTest.cpp
@@ -2,7 +2,7 @@
 // executed many times.
 #include <iostream>
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   int Num = 0;
   for (size_t i = 0; i < Size; i++)
     if (Data[i] == 'A' + i)
@@ -11,4 +11,5 @@
     std::cerr <<  "BINGO!\n";
     exit(1);
   }
+  return 0;
 }
diff --git a/llvm/lib/Fuzzer/test/CxxTokensTest.cpp b/llvm/lib/Fuzzer/test/CxxTokensTest.cpp
index 77d08b3..8277323 100644
--- a/llvm/lib/Fuzzer/test/CxxTokensTest.cpp
+++ b/llvm/lib/Fuzzer/test/CxxTokensTest.cpp
@@ -10,9 +10,9 @@
   exit(1);
 }
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   // looking for "thread_local unsigned A;"
-  if (Size < 24) return;
+  if (Size < 24) return 0;
   if (0 == memcmp(&Data[0], "thread_local", 12))
     if (Data[12] == ' ')
       if (0 == memcmp(&Data[13], "unsigned", 8))
@@ -20,5 +20,6 @@
           if (Data[22] == 'A')
             if (Data[23] == ';')
               Found();
+  return 0;
 }
 
diff --git a/llvm/lib/Fuzzer/test/FourIndependentBranchesTest.cpp b/llvm/lib/Fuzzer/test/FourIndependentBranchesTest.cpp
index e0b7509..6007dd4 100644
--- a/llvm/lib/Fuzzer/test/FourIndependentBranchesTest.cpp
+++ b/llvm/lib/Fuzzer/test/FourIndependentBranchesTest.cpp
@@ -4,7 +4,7 @@
 #include <cstddef>
 #include <iostream>
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   int bits = 0;
   if (Size > 0 && Data[0] == 'F') bits |= 1;
   if (Size > 1 && Data[1] == 'U') bits |= 2;
@@ -14,5 +14,6 @@
     std::cerr <<  "BINGO!\n";
     exit(1);
   }
+  return 0;
 }
 
diff --git a/llvm/lib/Fuzzer/test/FullCoverageSetTest.cpp b/llvm/lib/Fuzzer/test/FullCoverageSetTest.cpp
index 2c6ff98..a868084a 100644
--- a/llvm/lib/Fuzzer/test/FullCoverageSetTest.cpp
+++ b/llvm/lib/Fuzzer/test/FullCoverageSetTest.cpp
@@ -4,7 +4,7 @@
 #include <cstddef>
 #include <iostream>
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   int bits = 0;
   if (Size > 0 && Data[0] == 'F') bits |= 1;
   if (Size > 1 && Data[1] == 'U') bits |= 2;
@@ -16,5 +16,6 @@
     std::cerr <<  "BINGO!\n";
     exit(1);
   }
+  return 0;
 }
 
diff --git a/llvm/lib/Fuzzer/test/InfiniteTest.cpp b/llvm/lib/Fuzzer/test/InfiniteTest.cpp
index b6d174f..e3288ee 100644
--- a/llvm/lib/Fuzzer/test/InfiniteTest.cpp
+++ b/llvm/lib/Fuzzer/test/InfiniteTest.cpp
@@ -8,7 +8,7 @@
 
 static volatile int One = 1;
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   if (Size > 0 && Data[0] == 'H') {
     Sink = 1;
     if (Size > 1 && Data[1] == 'i') {
@@ -20,5 +20,6 @@
       }
     }
   }
+  return 0;
 }
 
diff --git a/llvm/lib/Fuzzer/test/MemcmpTest.cpp b/llvm/lib/Fuzzer/test/MemcmpTest.cpp
index 2954b6c..47ce59e 100644
--- a/llvm/lib/Fuzzer/test/MemcmpTest.cpp
+++ b/llvm/lib/Fuzzer/test/MemcmpTest.cpp
@@ -4,7 +4,7 @@
 #include <cstdio>
 #include <cstdlib>
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   // TODO: check other sizes.
   if (Size >= 8 && memcmp(Data, "01234567", 8) == 0) {
     if (Size >= 12 && memcmp(Data + 8, "ABCD", 4) == 0) {
@@ -16,4 +16,5 @@
       }
     }
   }
+  return 0;
 }
diff --git a/llvm/lib/Fuzzer/test/NullDerefTest.cpp b/llvm/lib/Fuzzer/test/NullDerefTest.cpp
index 0cff661..200c56c 100644
--- a/llvm/lib/Fuzzer/test/NullDerefTest.cpp
+++ b/llvm/lib/Fuzzer/test/NullDerefTest.cpp
@@ -7,7 +7,7 @@
 static volatile int Sink;
 static volatile int *Null = 0;
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   if (Size > 0 && Data[0] == 'H') {
     Sink = 1;
     if (Size > 1 && Data[1] == 'i') {
@@ -18,5 +18,6 @@
       }
     }
   }
+  return 0;
 }
 
diff --git a/llvm/lib/Fuzzer/test/SimpleCmpTest.cpp b/llvm/lib/Fuzzer/test/SimpleCmpTest.cpp
index ee37814..8568c737 100644
--- a/llvm/lib/Fuzzer/test/SimpleCmpTest.cpp
+++ b/llvm/lib/Fuzzer/test/SimpleCmpTest.cpp
@@ -4,8 +4,8 @@
 #include <cstring>
 #include <cstdio>
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
-  if (Size < 14) return;
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+  if (Size < 14) return 0;
   uint64_t x = 0;
   int64_t  y = 0;
   int z = 0;
@@ -27,4 +27,5 @@
             Size, x, y, z, a);
     exit(1);
   }
+  return 0;
 }
diff --git a/llvm/lib/Fuzzer/test/SimpleDictionaryTest.cpp b/llvm/lib/Fuzzer/test/SimpleDictionaryTest.cpp
index 20c8067..b9cb2f0 100644
--- a/llvm/lib/Fuzzer/test/SimpleDictionaryTest.cpp
+++ b/llvm/lib/Fuzzer/test/SimpleDictionaryTest.cpp
@@ -10,9 +10,9 @@
 
 static volatile int Zero = 0;
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   const char *Expected = "ElvisPresley";
-  if (Size < strlen(Expected)) return;
+  if (Size < strlen(Expected)) return 0;
   size_t Match = 0;
   for (size_t i = 0; Expected[i]; i++)
     if (Expected[i] + Zero == Data[i])
@@ -21,5 +21,6 @@
     std::cout << "BINGO; Found the target, exiting\n";
     exit(1);
   }
+  return 0;
 }
 
diff --git a/llvm/lib/Fuzzer/test/SimpleHashTest.cpp b/llvm/lib/Fuzzer/test/SimpleHashTest.cpp
index a541d68..5bab3fa 100644
--- a/llvm/lib/Fuzzer/test/SimpleHashTest.cpp
+++ b/llvm/lib/Fuzzer/test/SimpleHashTest.cpp
@@ -22,15 +22,16 @@
   return Hash;
 }
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   if (Size < 14)
-    return;
+    return 0;
 
   uint32_t Hash = simple_hash(&Data[0], Size - 4);
   uint32_t Want = reinterpret_cast<const uint32_t *>(&Data[Size - 4])[0];
   if (Hash != Want)
-    return;
+    return 0;
   fprintf(stderr, "BINGO; simple_hash defeated: %x == %x\n", (unsigned int)Hash,
           (unsigned int)Want);
   exit(1);
+  return 0;
 }
diff --git a/llvm/lib/Fuzzer/test/SimpleTest.cpp b/llvm/lib/Fuzzer/test/SimpleTest.cpp
index a891635..6811d11 100644
--- a/llvm/lib/Fuzzer/test/SimpleTest.cpp
+++ b/llvm/lib/Fuzzer/test/SimpleTest.cpp
@@ -6,7 +6,7 @@
 
 static volatile int Sink;
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   if (Size > 0 && Data[0] == 'H') {
     Sink = 1;
     if (Size > 1 && Data[1] == 'i') {
@@ -17,5 +17,6 @@
       }
     }
   }
+  return 0;
 }
 
diff --git a/llvm/lib/Fuzzer/test/StrcmpTest.cpp b/llvm/lib/Fuzzer/test/StrcmpTest.cpp
index 04264fa..835819a 100644
--- a/llvm/lib/Fuzzer/test/StrcmpTest.cpp
+++ b/llvm/lib/Fuzzer/test/StrcmpTest.cpp
@@ -16,7 +16,7 @@
   return res == 0;
 }
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   if (Eq(Data, Size, "AAA") &&
       Size >= 3 && Eq(Data + 3, Size - 3, "BBBB") &&
       Size >= 7 && Eq(Data + 7, Size - 7, "CCCCCC") &&
@@ -25,4 +25,5 @@
     fprintf(stderr, "BINGO\n");
     exit(1);
   }
+  return 0;
 }
diff --git a/llvm/lib/Fuzzer/test/StrncmpTest.cpp b/llvm/lib/Fuzzer/test/StrncmpTest.cpp
index 187a2fd..55344d7 100644
--- a/llvm/lib/Fuzzer/test/StrncmpTest.cpp
+++ b/llvm/lib/Fuzzer/test/StrncmpTest.cpp
@@ -6,7 +6,7 @@
 
 static volatile int sink;
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   // TODO: check other sizes.
   char *S = (char*)Data;
   if (Size >= 8 && strncmp(S, "123", 8))
@@ -21,4 +21,5 @@
       }
     }
   }
+  return 0;
 }
diff --git a/llvm/lib/Fuzzer/test/SwitchTest.cpp b/llvm/lib/Fuzzer/test/SwitchTest.cpp
index 9f921fb..5de7fff 100644
--- a/llvm/lib/Fuzzer/test/SwitchTest.cpp
+++ b/llvm/lib/Fuzzer/test/SwitchTest.cpp
@@ -42,7 +42,7 @@
   return false;
 }
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   if (Size >= 4  && Switch<int>(Data, Size) &&
       Size >= 12 && Switch<uint64_t>(Data + 4, Size - 4) &&
       Size >= 14 && ShortSwitch(Data + 12, 2)
@@ -50,5 +50,6 @@
     fprintf(stderr, "BINGO; Found the target, exiting\n");
     exit(1);
   }
+  return 0;
 }
 
diff --git a/llvm/lib/Fuzzer/test/TimeoutTest.cpp b/llvm/lib/Fuzzer/test/TimeoutTest.cpp
index d541c05..71790de 100644
--- a/llvm/lib/Fuzzer/test/TimeoutTest.cpp
+++ b/llvm/lib/Fuzzer/test/TimeoutTest.cpp
@@ -6,7 +6,7 @@
 
 static volatile int Sink;
 
-extern "C" void LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   if (Size > 0 && Data[0] == 'H') {
     Sink = 1;
     if (Size > 1 && Data[1] == 'i') {
@@ -18,5 +18,6 @@
       }
     }
   }
+  return 0;
 }
 
diff --git a/llvm/lib/Fuzzer/test/UserSuppliedFuzzerTest.cpp b/llvm/lib/Fuzzer/test/UserSuppliedFuzzerTest.cpp
index 1e497cb..59f83b5 100644
--- a/llvm/lib/Fuzzer/test/UserSuppliedFuzzerTest.cpp
+++ b/llvm/lib/Fuzzer/test/UserSuppliedFuzzerTest.cpp
@@ -16,9 +16,9 @@
  public:
   MyFuzzer(fuzzer::FuzzerRandomBase *Rand)
       : fuzzer::UserSuppliedFuzzer(Rand) {}
-  void TargetFunction(const uint8_t *Data, size_t Size) {
-    if (Size <= 10) return;
-    if (memcmp(Data, &kMagic, sizeof(kMagic))) return;
+  int TargetFunction(const uint8_t *Data, size_t Size) {
+    if (Size <= 10) return 0;
+    if (memcmp(Data, &kMagic, sizeof(kMagic))) return 0;
     // It's hard to get here w/o advanced fuzzing techniques (e.g. cmp tracing).
     // So, we simply 'fix' the data in the custom mutator.
     if (Data[8] == 'H') {
@@ -29,6 +29,7 @@
         }
       }
     }
+    return 0;
   }
   // Custom mutator.
   virtual size_t Mutate(uint8_t *Data, size_t Size, size_t MaxSize) {