summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Fuzzer/test/LargeTest.cpp
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2017-03-11 01:54:06 +0000
committerKostya Serebryany <kcc@google.com>2017-03-11 01:54:06 +0000
commitb6b2f18ea8776087bd78228c46f4a0ee73923642 (patch)
tree8eaf432c84f6280b625d14f23cd5a3bd0a25127a /llvm/lib/Fuzzer/test/LargeTest.cpp
parent7939ee4d51b7025bb9324074077ae1f0d06ce2c1 (diff)
downloadbcm5719-llvm-b6b2f18ea8776087bd78228c46f4a0ee73923642.tar.gz
bcm5719-llvm-b6b2f18ea8776087bd78228c46f4a0ee73923642.zip
[libFuzzer] add test/LargeTest.cpp, mostly for manual experiments with large number of edges, not yet suitable for unit testing
llvm-svn: 297544
Diffstat (limited to 'llvm/lib/Fuzzer/test/LargeTest.cpp')
-rw-r--r--llvm/lib/Fuzzer/test/LargeTest.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/llvm/lib/Fuzzer/test/LargeTest.cpp b/llvm/lib/Fuzzer/test/LargeTest.cpp
new file mode 100644
index 00000000000..83ed6197180
--- /dev/null
+++ b/llvm/lib/Fuzzer/test/LargeTest.cpp
@@ -0,0 +1,37 @@
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+
+// A fuzz target with lots of edges.
+#include <cstdint>
+#include <cstdlib>
+
+static inline void break_optimization(const void *arg) {
+ __asm__ __volatile__("" : : "r" (arg) : "memory");
+}
+
+#define A \
+ do { \
+ i++; \
+ c++; \
+ if (Data[(i + __LINE__) % Size] == (c % 256)) \
+ break_optimization(Data); \
+ else \
+ break_optimization(0); \
+ } while (0)
+
+// for (int i = 0, n = Data[(__LINE__ - 1) % Size] % 16; i < n; i++)
+
+#define B do{A; A; A; A; A; A; A; A; A; A; A; A; A; A; A; A; A; A; }while(0)
+#define C do{B; B; B; B; B; B; B; B; B; B; B; B; B; B; B; B; B; B; }while(0)
+#define D do{C; C; C; C; C; C; C; C; C; C; C; C; C; C; C; C; C; C; }while(0)
+#define E do{D; D; D; D; D; D; D; D; D; D; D; D; D; D; D; D; D; D; }while(0)
+
+volatile int sink;
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+ if (!Size) return 0;
+ int c = 0;
+ int i = 0;
+ D;
+ return 0;
+}
+
OpenPOWER on IntegriCloud