diff options
Diffstat (limited to 'test/fuzzer/PrintUnstableStatsTest.cpp')
| -rw-r--r-- | test/fuzzer/PrintUnstableStatsTest.cpp | 69 | 
1 files changed, 69 insertions, 0 deletions
diff --git a/test/fuzzer/PrintUnstableStatsTest.cpp b/test/fuzzer/PrintUnstableStatsTest.cpp new file mode 100644 index 000000000000..078eb4c3d971 --- /dev/null +++ b/test/fuzzer/PrintUnstableStatsTest.cpp @@ -0,0 +1,69 @@ +#include <assert.h> +#include <cstdint> +#include <cstdio> +#include <cstdlib> + +int x = 0; +bool skip0 = false; +bool skip1 = false; +bool skip2 = false; + +__attribute__((noinline)) void det0() { x++; } +__attribute__((noinline)) void det1() { x++; } +__attribute__((noinline)) void det2() { x++; } +__attribute__((noinline)) void det3() { x++; } +__attribute__((noinline)) void det4() { x++; } + +__attribute__((noinline)) void ini0() { x++; } +__attribute__((noinline)) void ini1() { x++; } +__attribute__((noinline)) void ini2() { x++; } + +__attribute__((noinline)) void t0() { x++; } +__attribute__((noinline)) void t1() { x++; } +__attribute__((noinline)) void t2() { x++; } +__attribute__((noinline)) void t3() { x++; } +__attribute__((noinline)) void t4() { x++; } + +extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { +  if (Size == 1 && Data[0] == 'A' && !skip0) { +    skip0 = true; +    ini0(); +  } +  if (Size == 1 && Data[0] == 'B' && !skip1) { +    skip1 = true; +    ini1(); +  } +  if (Size == 1 && Data[0] == 'C' && !skip2) { +    skip2 = true; +    ini2(); +  } + +  det0(); +  det1(); +  int a = rand(); +  det2(); + +  switch (a % 5) { +  case 0: +    t0(); +    break; +  case 1: +    t1(); +    break; +  case 2: +    t2(); +    break; +  case 3: +    t3(); +    break; +  case 4: +    t4(); +    break; +  default: +    assert(false); +  } + +  det3(); +  det4(); +  return 0; +}  | 
