emmettneyman updated this revision to Diff 159083.
emmettneyman added a comment.

Refactored code to avoid memcpy-ing function


Repository:
  rC Clang

https://reviews.llvm.org/D50194

Files:
  clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
  clang/tools/clang-fuzzer/handle-llvm/handle_llvm.h
  clang/tools/clang-fuzzer/handle-llvm/input_arrays.h

Index: clang/tools/clang-fuzzer/handle-llvm/input_arrays.h
===================================================================
--- /dev/null
+++ clang/tools/clang-fuzzer/handle-llvm/input_arrays.h
@@ -0,0 +1,125 @@
+//==-- input_arrays.h - Helper function for LLVM fuzzer inputs -------------==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Define a few static variables used by the LLVM Proto Fuzzer
+//
+//===----------------------------------------------------------------------===//
+
+#include <iostream>
+#include <string.h>
+
+static const int ArraySize = 64;
+static const int NumArrays = 100;
+
+// Define two arrays that will hold the input and output for the two functions
+static int OptArrays[NumArrays][ArraySize];
+static int UnoptArrays[NumArrays][ArraySize];
+
+// Define a corpus of possible inputs
+static int InputArrays[NumArrays][ArraySize] =
+{ {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+  {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
+  {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
+  {0, 0, 0, 5, 0, 2, 0, 8, 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
+  {1, 1, 2, 1, 6, 0, 3, 1, 10, 10, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
+  {0, 0, 2, 0, 0, 7, 0, 4, 2, 0, 12, 12, 0, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
+  {1, 1, 0, 2, 2, 9, 8, 0, 5, 3, 1, 14, 14, 14, 0, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14},
+  {0, 0, 0, 4, 0, 1, 10, 9, 0, 6, 4, 2, 0, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
+  {1, 1, 2, 3, 2, 3, 0, 11, 10, 0, 7, 5, 3, 1, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18},
+  {0, 0, 2, 5, 4, 0, 2, 13, 12, 11, 0, 8, 6, 4, 2, 0, 20, 20, 20, 20, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20},
+  {1, 1, 0, 1, 6, 2, 4, 1, 14, 13, 12, 0, 9, 7, 5, 3, 1, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22},
+  {0, 0, 0, 0, 4, 4, 0, 3, 0, 15, 14, 13, 0, 10, 8, 6, 4, 2, 0, 24, 24, 24, 24, 24, 0, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24},
+  {1, 1, 2, 2, 6, 6, 2, 5, 2, 17, 16, 15, 14, 0, 11, 9, 7, 5, 3, 1, 26, 26, 26, 26, 26, 26, 0, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26},
+  {0, 0, 2, 4, 0, 8, 4, 0, 4, 1, 18, 17, 16, 15, 0, 12, 10, 8, 6, 4, 2, 0, 28, 28, 28, 28, 28, 28, 0, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28},
+  {1, 1, 0, 3, 2, 5, 6, 2, 6, 3, 0, 19, 18, 17, 16, 0, 13, 11, 9, 7, 5, 3, 1, 30, 30, 30, 30, 30, 30, 30, 0, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30},
+  {0, 0, 0, 5, 0, 7, 8, 4, 0, 5, 2, 21, 20, 19, 18, 17, 0, 14, 12, 10, 8, 6, 4, 2, 0, 32, 32, 32, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
+  {1, 1, 2, 1, 2, 9, 10, 6, 2, 7, 4, 1, 22, 21, 20, 19, 18, 0, 15, 13, 11, 9, 7, 5, 3, 1, 34, 34, 34, 34, 34, 34, 34, 34, 0, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34},
+  {0, 0, 2, 0, 4, 1, 6, 8, 4, 0, 6, 3, 0, 23, 22, 21, 20, 19, 0, 16, 14, 12, 10, 8, 6, 4, 2, 0, 36, 36, 36, 36, 36, 36, 36, 36, 0, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36},
+  {1, 1, 0, 2, 6, 3, 8, 10, 6, 2, 8, 5, 2, 25, 24, 23, 22, 21, 20, 0, 17, 15, 13, 11, 9, 7, 5, 3, 1, 38, 38, 38, 38, 38, 38, 38, 38, 38, 0, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38},
+  {0, 0, 0, 4, 4, 0, 10, 12, 8, 4, 0, 7, 4, 1, 26, 25, 24, 23, 22, 21, 0, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 0, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40},
+  {1, 1, 2, 3, 6, 2, 0, 7, 10, 6, 2, 9, 6, 3, 0, 27, 26, 25, 24, 23, 22, 0, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 0, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42},
+  {0, 0, 2, 5, 0, 4, 2, 9, 12, 8, 4, 0, 8, 5, 2, 29, 28, 27, 26, 25, 24, 23, 0, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 0, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44},
+  {1, 1, 0, 1, 2, 6, 4, 11, 14, 10, 6, 2, 10, 7, 4, 1, 30, 29, 28, 27, 26, 25, 24, 0, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 0, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46},
+  {0, 0, 0, 0, 0, 8, 0, 13, 8, 12, 8, 4, 0, 9, 6, 3, 0, 31, 30, 29, 28, 27, 26, 25, 0, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48},
+  {1, 1, 2, 2, 2, 5, 2, 1, 10, 14, 10, 6, 2, 11, 8, 5, 2, 33, 32, 31, 30, 29, 28, 27, 26, 0, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 0, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50},
+  {0, 0, 2, 4, 4, 7, 4, 3, 12, 16, 12, 8, 4, 0, 10, 7, 4, 1, 34, 33, 32, 31, 30, 29, 28, 27, 0, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52},
+  {1, 1, 0, 3, 6, 9, 6, 5, 14, 9, 14, 10, 6, 2, 12, 9, 6, 3, 0, 35, 34, 33, 32, 31, 30, 29, 28, 0, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 0, 54, 54, 54, 54, 54, 54, 54, 54, 54},
+  {0, 0, 0, 5, 4, 1, 8, 0, 0, 11, 16, 12, 8, 4, 0, 11, 8, 5, 2, 37, 36, 35, 34, 33, 32, 31, 30, 29, 0, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 0, 56, 56, 56, 56, 56, 56, 56},
+  {1, 1, 2, 1, 6, 3, 10, 2, 2, 13, 18, 14, 10, 6, 2, 13, 10, 7, 4, 1, 38, 37, 36, 35, 34, 33, 32, 31, 30, 0, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 0, 58, 58, 58, 58, 58},
+  {0, 0, 2, 0, 0, 0, 6, 4, 4, 15, 10, 16, 12, 8, 4, 0, 12, 9, 6, 3, 0, 39, 38, 37, 36, 35, 34, 33, 32, 31, 0, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 0, 60, 60, 60},
+  {1, 1, 0, 2, 2, 2, 8, 6, 6, 17, 12, 18, 14, 10, 6, 2, 14, 11, 8, 5, 2, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 0, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 0, 62},
+  {0, 0, 0, 4, 0, 4, 10, 8, 0, 1, 14, 20, 16, 12, 8, 4, 0, 13, 10, 7, 4, 1, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 0, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64},
+  {1, 1, 2, 3, 2, 6, 0, 10, 2, 3, 16, 11, 18, 14, 10, 6, 2, 15, 12, 9, 6, 3, 0, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 0, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66},
+  {0, 0, 2, 5, 4, 8, 2, 12, 4, 5, 18, 13, 20, 16, 12, 8, 4, 0, 14, 11, 8, 5, 2, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 0, 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68},
+  {1, 1, 0, 1, 6, 5, 4, 7, 6, 7, 0, 15, 22, 18, 14, 10, 6, 2, 16, 13, 10, 7, 4, 1, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 0, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70},
+  {0, 0, 0, 0, 4, 7, 0, 9, 8, 0, 2, 17, 12, 20, 16, 12, 8, 4, 0, 15, 12, 9, 6, 3, 0, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 0, 34, 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 72, 72, 72, 72, 72, 72, 72, 72, 72},
+  {1, 1, 2, 2, 6, 9, 2, 11, 10, 2, 4, 19, 14, 22, 18, 14, 10, 6, 2, 17, 14, 11, 8, 5, 2, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 0, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 74, 74, 74, 74, 74, 74, 74, 74},
+  {0, 0, 2, 4, 0, 1, 4, 13, 12, 4, 6, 21, 16, 24, 20, 16, 12, 8, 4, 0, 16, 13, 10, 7, 4, 1, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 0, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 76, 76, 76, 76, 76, 76},
+  {1, 1, 0, 3, 2, 3, 6, 1, 14, 6, 8, 1, 18, 13, 22, 18, 14, 10, 6, 2, 18, 15, 12, 9, 6, 3, 0, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 0, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 78, 78, 78, 78, 78},
+  {0, 0, 0, 5, 0, 0, 8, 3, 8, 8, 0, 3, 20, 15, 24, 20, 16, 12, 8, 4, 0, 17, 14, 11, 8, 5, 2, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 0, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0, 80, 80, 80},
+  {1, 1, 2, 1, 2, 2, 10, 5, 10, 10, 2, 5, 22, 17, 26, 22, 18, 14, 10, 6, 2, 19, 16, 13, 10, 7, 4, 1, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 0, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3, 1, 82, 82},
+  {0, 0, 2, 0, 4, 4, 6, 0, 12, 12, 4, 7, 0, 19, 14, 24, 20, 16, 12, 8, 4, 0, 18, 15, 12, 9, 6, 3, 0, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 0, 40, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4, 2, 0},
+  {1, 1, 0, 2, 6, 6, 8, 2, 14, 14, 6, 9, 2, 21, 16, 26, 22, 18, 14, 10, 6, 2, 20, 17, 14, 11, 8, 5, 2, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 0, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9, 7, 5, 3},
+  {0, 0, 0, 4, 4, 8, 10, 4, 0, 16, 8, 0, 4, 23, 18, 28, 24, 20, 16, 12, 8, 4, 0, 19, 16, 13, 10, 7, 4, 1, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 0, 42, 40, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6},
+  {1, 1, 2, 3, 6, 5, 0, 6, 2, 9, 10, 2, 6, 25, 20, 15, 26, 22, 18, 14, 10, 6, 2, 21, 18, 15, 12, 9, 6, 3, 0, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 0, 43, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15, 13, 11, 9},
+  {0, 0, 2, 5, 0, 7, 2, 8, 4, 11, 12, 4, 8, 1, 22, 17, 28, 24, 20, 16, 12, 8, 4, 0, 20, 17, 14, 11, 8, 5, 2, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 0, 44, 42, 40, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12},
+  {1, 1, 0, 1, 2, 9, 4, 10, 6, 13, 14, 6, 10, 3, 24, 19, 30, 26, 22, 18, 14, 10, 6, 2, 22, 19, 16, 13, 10, 7, 4, 1, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 0, 45, 43, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21, 19, 17, 15},
+  {0, 0, 0, 0, 0, 1, 0, 12, 0, 15, 16, 8, 0, 5, 26, 21, 16, 28, 24, 20, 16, 12, 8, 4, 0, 21, 18, 15, 12, 9, 6, 3, 0, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 0, 46, 44, 42, 40, 38, 36, 34, 32, 30, 28, 26, 24, 22, 20, 18},
+  {1, 1, 2, 2, 2, 3, 2, 7, 2, 17, 18, 10, 2, 7, 0, 23, 18, 30, 26, 22, 18, 14, 10, 6, 2, 23, 20, 17, 14, 11, 8, 5, 2, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 0, 47, 45, 43, 41, 39, 37, 35, 33, 31, 29, 27, 25, 23, 21},
+  {0, 0, 2, 4, 4, 0, 4, 9, 4, 1, 10, 12, 4, 9, 2, 25, 20, 32, 28, 24, 20, 16, 12, 8, 4, 0, 22, 19, 16, 13, 10, 7, 4, 1, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 0, 48, 46, 44, 42, 40, 38, 36, 34, 32, 30, 28, 26, 24},
+  {1, 1, 0, 3, 6, 2, 6, 11, 6, 3, 12, 14, 6, 11, 4, 27, 22, 17, 30, 26, 22, 18, 14, 10, 6, 2, 24, 21, 18, 15, 12, 9, 6, 3, 0, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 0, 49, 47, 45, 43, 41, 39, 37, 35, 33, 31, 29, 27},
+  {0, 0, 0, 5, 4, 4, 8, 13, 8, 5, 14, 16, 8, 0, 6, 29, 24, 19, 32, 28, 24, 20, 16, 12, 8, 4, 0, 23, 20, 17, 14, 11, 8, 5, 2, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 0, 50, 48, 46, 44, 42, 40, 38, 36, 34, 32, 30},
+  {1, 1, 2, 1, 6, 6, 10, 1, 10, 7, 16, 18, 10, 2, 8, 1, 26, 21, 34, 30, 26, 22, 18, 14, 10, 6, 2, 25, 22, 19, 16, 13, 10, 7, 4, 1, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 0, 51, 49, 47, 45, 43, 41, 39, 37, 35, 33},
+  {0, 0, 2, 0, 0, 8, 6, 3, 12, 0, 18, 20, 12, 4, 10, 3, 28, 23, 18, 32, 28, 24, 20, 16, 12, 8, 4, 0, 24, 21, 18, 15, 12, 9, 6, 3, 0, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 0, 52, 50, 48, 46, 44, 42, 40, 38, 36},
+  {1, 1, 0, 2, 2, 5, 8, 5, 14, 2, 0, 11, 14, 6, 12, 5, 30, 25, 20, 34, 30, 26, 22, 18, 14, 10, 6, 2, 26, 23, 20, 17, 14, 11, 8, 5, 2, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 0, 53, 51, 49, 47, 45, 43, 41, 39},
+  {0, 0, 0, 4, 0, 7, 10, 0, 8, 4, 2, 13, 16, 8, 0, 7, 0, 27, 22, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 25, 22, 19, 16, 13, 10, 7, 4, 1, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 0, 54, 52, 50, 48, 46, 44, 42},
+  {1, 1, 2, 3, 2, 9, 0, 2, 10, 6, 4, 15, 18, 10, 2, 9, 2, 29, 24, 19, 34, 30, 26, 22, 18, 14, 10, 6, 2, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 0, 55, 53, 51, 49, 47, 45},
+  {0, 0, 2, 5, 4, 1, 2, 4, 12, 8, 6, 17, 20, 12, 4, 11, 4, 31, 26, 21, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 26, 23, 20, 17, 14, 11, 8, 5, 2, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 0, 56, 54, 52, 50, 48},
+  {1, 1, 0, 1, 6, 3, 4, 6, 14, 10, 8, 19, 22, 14, 6, 13, 6, 33, 28, 23, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 0, 57, 55, 53, 51},
+  {0, 0, 0, 0, 4, 0, 0, 8, 0, 12, 0, 21, 12, 16, 8, 0, 8, 1, 30, 25, 20, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 0, 58, 56, 54},
+  {1, 1, 2, 2, 6, 2, 2, 10, 2, 14, 2, 1, 14, 18, 10, 2, 10, 3, 32, 27, 22, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 0, 59, 57},
+  {0, 0, 2, 4, 0, 4, 4, 12, 4, 16, 4, 3, 16, 20, 12, 4, 12, 5, 34, 29, 24, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 0, 60},
+  {1, 1, 0, 3, 2, 6, 6, 7, 6, 9, 6, 5, 18, 22, 14, 6, 14, 7, 0, 31, 26, 21, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 0},
+  {0, 0, 0, 5, 0, 8, 8, 9, 0, 11, 8, 7, 20, 24, 16, 8, 0, 9, 2, 33, 28, 23, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65},
+  {1, 1, 2, 1, 2, 5, 10, 11, 2, 13, 10, 9, 22, 13, 18, 10, 2, 11, 4, 35, 30, 25, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67},
+  {0, 0, 2, 0, 4, 7, 6, 13, 4, 15, 12, 0, 0, 15, 20, 12, 4, 13, 6, 37, 32, 27, 22, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69},
+  {1, 1, 0, 2, 6, 9, 8, 1, 6, 17, 14, 2, 2, 17, 22, 14, 6, 15, 8, 1, 34, 29, 24, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71},
+  {0, 0, 0, 4, 4, 1, 10, 3, 8, 1, 16, 4, 4, 19, 24, 16, 8, 0, 10, 3, 36, 31, 26, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73},
+  {1, 1, 2, 3, 6, 3, 0, 5, 10, 3, 18, 6, 6, 21, 26, 18, 10, 2, 12, 5, 38, 33, 28, 23, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75},
+  {0, 0, 2, 5, 0, 0, 2, 0, 12, 5, 10, 8, 8, 23, 14, 20, 12, 4, 14, 7, 0, 35, 30, 25, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77},
+  {1, 1, 0, 1, 2, 2, 4, 2, 14, 7, 12, 10, 10, 25, 16, 22, 14, 6, 16, 9, 2, 37, 32, 27, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79},
+  {0, 0, 0, 0, 0, 4, 0, 4, 8, 0, 14, 12, 0, 1, 18, 24, 16, 8, 0, 11, 4, 39, 34, 29, 24, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81},
+  {1, 1, 2, 2, 2, 6, 2, 6, 10, 2, 16, 14, 2, 3, 20, 26, 18, 10, 2, 13, 6, 41, 36, 31, 26, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 35, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83},
+  {0, 0, 2, 4, 4, 8, 4, 8, 12, 4, 18, 16, 4, 5, 22, 28, 20, 12, 4, 15, 8, 1, 38, 33, 28, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85},
+  {1, 1, 0, 3, 6, 5, 6, 10, 14, 6, 0, 18, 6, 7, 24, 15, 22, 14, 6, 17, 10, 3, 40, 35, 30, 25, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87},
+  {0, 0, 0, 5, 4, 7, 8, 12, 0, 8, 2, 20, 8, 9, 26, 17, 24, 16, 8, 0, 12, 5, 42, 37, 32, 27, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 35, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89},
+  {1, 1, 2, 1, 6, 9, 10, 7, 2, 10, 4, 11, 10, 11, 0, 19, 26, 18, 10, 2, 14, 7, 0, 39, 34, 29, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93, 92, 91},
+  {0, 0, 2, 0, 0, 1, 6, 9, 4, 12, 6, 13, 12, 0, 2, 21, 28, 20, 12, 4, 16, 9, 2, 41, 36, 31, 26, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 103, 102, 101, 100, 99, 98, 97, 96, 95, 94, 93},
+  {1, 1, 0, 2, 2, 3, 8, 11, 6, 14, 8, 15, 14, 2, 4, 23, 30, 22, 14, 6, 18, 11, 4, 43, 38, 33, 28, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 38, 35, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, 95},
+  {0, 0, 0, 4, 0, 0, 10, 13, 0, 16, 0, 17, 16, 4, 6, 25, 16, 24, 16, 8, 0, 13, 6, 45, 40, 35, 30, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97},
+  {1, 1, 2, 3, 2, 2, 0, 1, 2, 9, 2, 19, 18, 6, 8, 27, 18, 26, 18, 10, 2, 15, 8, 1, 42, 37, 32, 27, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 107, 106, 105, 104, 103, 102, 101, 100, 99},
+  {0, 0, 2, 5, 4, 4, 2, 3, 4, 11, 4, 21, 20, 8, 10, 29, 20, 28, 20, 12, 4, 17, 10, 3, 44, 39, 34, 29, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 38, 35, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 109, 108, 107, 106, 105, 104, 103, 102, 101},
+  {1, 1, 0, 1, 6, 6, 4, 5, 6, 13, 6, 1, 22, 10, 12, 1, 22, 30, 22, 14, 6, 19, 12, 5, 46, 41, 36, 31, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 110, 109, 108, 107, 106, 105, 104, 103},
+  {0, 0, 0, 0, 4, 8, 0, 0, 8, 15, 8, 3, 12, 12, 0, 3, 24, 32, 24, 16, 8, 0, 14, 7, 0, 43, 38, 33, 28, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 111, 110, 109, 108, 107, 106, 105},
+  {1, 1, 2, 2, 6, 5, 2, 2, 10, 17, 10, 5, 14, 14, 2, 5, 26, 17, 26, 18, 10, 2, 16, 9, 2, 45, 40, 35, 30, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 41, 38, 35, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 113, 112, 111, 110, 109, 108, 107},
+  {0, 0, 2, 4, 0, 7, 4, 4, 12, 1, 12, 7, 16, 16, 4, 7, 28, 19, 28, 20, 12, 4, 18, 11, 4, 47, 42, 37, 32, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 114, 113, 112, 111, 110, 109},
+  {1, 1, 0, 3, 2, 9, 6, 6, 14, 3, 14, 9, 18, 18, 6, 9, 30, 21, 30, 22, 14, 6, 20, 13, 6, 49, 44, 39, 34, 29, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 115, 114, 113, 112, 111},
+  {0, 0, 0, 5, 0, 1, 8, 8, 8, 5, 16, 0, 20, 20, 8, 11, 0, 23, 32, 24, 16, 8, 0, 15, 8, 1, 46, 41, 36, 31, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 41, 38, 35, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 117, 116, 115, 114, 113},
+  {1, 1, 2, 1, 2, 3, 10, 10, 10, 7, 18, 2, 22, 22, 10, 13, 2, 25, 34, 26, 18, 10, 2, 17, 10, 3, 48, 43, 38, 33, 58, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 43, 40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 118, 117, 116, 115},
+  {0, 0, 2, 0, 4, 0, 6, 12, 12, 0, 10, 4, 0, 24, 12, 0, 4, 27, 18, 28, 20, 12, 4, 19, 12, 5, 50, 45, 40, 35, 30, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 119, 118, 117},
+  {1, 1, 0, 2, 6, 2, 8, 7, 14, 2, 12, 6, 2, 13, 14, 2, 6, 29, 20, 30, 22, 14, 6, 21, 14, 7, 0, 47, 42, 37, 32, 58, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 44, 41, 38, 35, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 121, 120, 119},
+  {0, 0, 0, 4, 4, 4, 10, 9, 0, 4, 14, 8, 4, 15, 16, 4, 8, 31, 22, 32, 24, 16, 8, 0, 16, 9, 2, 49, 44, 39, 34, 60, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 43, 40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1, 122, 121},
+  {1, 1, 2, 3, 6, 6, 0, 11, 2, 6, 16, 10, 6, 17, 18, 6, 10, 33, 24, 34, 26, 18, 10, 2, 18, 11, 4, 51, 46, 41, 36, 31, 58, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 45, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3, 0, 123},
+  {0, 0, 2, 5, 0, 8, 2, 13, 4, 8, 18, 12, 8, 19, 20, 8, 12, 1, 26, 36, 28, 20, 12, 4, 20, 13, 6, 53, 48, 43, 38, 33, 60, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 44, 41, 38, 35, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5, 2, 125},
+  {1, 1, 0, 1, 2, 5, 4, 1, 6, 10, 0, 14, 10, 21, 22, 10, 14, 3, 28, 19, 30, 22, 14, 6, 22, 15, 8, 1, 50, 45, 40, 35, 62, 58, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 46, 43, 40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7, 4, 1},
+  {0, 0, 0, 0, 0, 7, 0, 3, 0, 12, 2, 16, 0, 23, 24, 12, 0, 5, 30, 21, 32, 24, 16, 8, 0, 17, 10, 3, 52, 47, 42, 37, 32, 60, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 45, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9, 6, 3},
+  {1, 1, 2, 2, 2, 9, 2, 5, 2, 14, 4, 18, 2, 25, 26, 14, 2, 7, 32, 23, 34, 26, 18, 10, 2, 19, 12, 5, 54, 49, 44, 39, 34, 62, 58, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 47, 44, 41, 38, 35, 32, 29, 26, 23, 20, 17, 14, 11, 8, 5},
+  {0, 0, 2, 4, 4, 1, 4, 0, 4, 16, 6, 20, 4, 1, 14, 16, 4, 9, 34, 25, 36, 28, 20, 12, 4, 21, 14, 7, 0, 51, 46, 41, 36, 64, 60, 56, 52, 48, 44, 40, 36, 32, 28, 24, 20, 16, 12, 8, 4, 0, 46, 43, 40, 37, 34, 31, 28, 25, 22, 19, 16, 13, 10, 7},
+  {1, 1, 0, 3, 6, 3, 6, 2, 6, 9, 8, 11, 6, 3, 16, 18, 6, 11, 0, 27, 38, 30, 22, 14, 6, 23, 16, 9, 2, 53, 48, 43, 38, 33, 62, 58, 54, 50, 46, 42, 38, 34, 30, 26, 22, 18, 14, 10, 6, 2, 48, 45, 42, 39, 36, 33, 30, 27, 24, 21, 18, 15, 12, 9} };
Index: clang/tools/clang-fuzzer/handle-llvm/handle_llvm.h
===================================================================
--- clang/tools/clang-fuzzer/handle-llvm/handle_llvm.h
+++ clang/tools/clang-fuzzer/handle-llvm/handle_llvm.h
@@ -19,7 +19,7 @@
 
 namespace clang_fuzzer {
 void HandleLLVM(const std::string &S,
-               const std::vector<const char *> &ExtraArgs);
+                const std::vector<const char *> &ExtraArgs);
 } // namespace clang_fuzzer
 
 #endif
Index: clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
===================================================================
--- clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
+++ clang/tools/clang-fuzzer/handle-llvm/handle_llvm.cpp
@@ -15,6 +15,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "handle_llvm.h"
+#include "input_arrays.h"
 
 #include "llvm/ADT/Triple.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
@@ -48,6 +49,9 @@
 
 using namespace llvm;
 
+// Define a type for the functions that are compiled and executed
+typedef void (*LLVMFunc)(int*, int*, int*, int);
+
 // Helper function to parse command line args and find the optimization level
 static void getOptLevel(const std::vector<const char *> &ExtraArgs,
                               CodeGenOpt::Level &OLvl) {
@@ -68,6 +72,7 @@
   }
 }
 
+// Helper function to print error message and stop the fuzzer
 void ErrorAndExit(std::string message) {
   errs()<< "ERROR: " << message << "\n";
   std::exit(1);
@@ -117,11 +122,25 @@
   return OS.str();
 }
 
-void CreateAndRunJITFun(const std::string &IR, CodeGenOpt::Level OLvl) {
+// Takes a function and runs it on a set of inputs
+// First determines whether f is the optimized or unoptimized function
+void RunFuncOnInputs(LLVMFunc f, int x) {
+  if (x) {
+    for (int i = 0; i < NumArrays; i++)
+      f(OptArrays[i], OptArrays[(i + 1) % NumArrays],
+        OptArrays[(i + 2) % NumArrays], ArraySize);
+  } else {
+    for (int i = 0; i < NumArrays; i++)
+      f(UnoptArrays[i], UnoptArrays[(i + 1) % NumArrays],
+        UnoptArrays[(i + 2) % NumArrays], ArraySize);
+  }
+}
+
+// Takes a string of IR and compiles it using LLVM's JIT Engine
+void CreateJITFunc(const std::string &IR, CodeGenOpt::Level OLvl) {
   SMDiagnostic Err;
   LLVMContext Context;
-  std::unique_ptr<Module> M = parseIR(MemoryBufferRef(IR, "IR"), Err,
-                                          Context);
+  std::unique_ptr<Module> M = parseIR(MemoryBufferRef(IR, "IR"), Err, Context);
   if (!M)
     ErrorAndExit("Could not parse IR");
 
@@ -148,31 +167,35 @@
   EE->finalizeObject();
   EE->runStaticConstructorsDestructors(false);
 
-  typedef void (*func)(int*, int*, int*, int);
-  func f = reinterpret_cast<func>(EE->getPointerToFunction(EntryFunc)); 
+  LLVMFunc f = (LLVMFunc) EE->getPointerToFunction(EntryFunc); 
 
-  // Define some dummy arrays to use an input for now
-  int a[] = {1};
-  int b[] = {1};
-  int c[] = {1};
-  f(a, b, c, 1);
+  // Figure out if we are running the optimized func or the unoptimized func
+  int x = (OLvl == CodeGenOpt::None) ? 1 : 0;
+  RunFuncOnInputs(f, x);
 
   EE->runStaticConstructorsDestructors(true);
 }
 
 // Main fuzz target called by ExampleClangLLVMProtoFuzzer.cpp
 // Mimics the lli tool to JIT the LLVM IR code and execute it
 void clang_fuzzer::HandleLLVM(const std::string &IR,
                               const std::vector<const char *> &ExtraArgs) {
+  // Populate OptArrays and UnoptArrays with the arrays from InputArrays
+  memcpy(OptArrays, InputArrays, sizeof(int) * ArraySize * NumArrays);
+  memcpy(UnoptArrays, InputArrays, sizeof(int) * ArraySize * NumArrays);
+
   // Parse ExtraArgs to set the optimization level
   CodeGenOpt::Level OLvl;
   getOptLevel(ExtraArgs, OLvl);
 
   // First we optimize the IR by running a loop vectorizer pass
   std::string OptIR = OptLLVM(IR, OLvl);
 
-  CreateAndRunJITFun(OptIR, OLvl);
-  CreateAndRunJITFun(IR, CodeGenOpt::None);
-  
+  CreateJITFunc(OptIR, OLvl);
+  CreateJITFunc(IR, CodeGenOpt::None);
+
+  if (memcmp(OptArrays, UnoptArrays, sizeof(int) * ArraySize * NumArrays))
+    ErrorAndExit("!!!BUG!!!");
+
   return;
 }
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to